دورة SYMFONY 4 للمبتدئين الدرس السابع


فهاد الدرس السابع من دورة SYMFONY 4 للمبتدئين غادي نكملوا الدورة ديالنا منبعد مازدنا les articles فقاعدة البيانات دبا غادي نشوفوا كيفاش نسترجعهم ونعرضهم فالصفحة hello.html.twig وأيضا غادي نشوفوا كيفاش نسترجعوا article بل id ديالو.


1- إسترجاع les articles من قاعدة البيانات

باش نسترجع les articles كاملين من قاعدة البيانات غادي نخدم بواحد الحاجة سميتها repository لي هي class symfony ولي فيها مجموعة ديال les fonctions لي كيمكنونا من استرجاع المعلومات من قاعدة البيانات.

غادي نمشي ل HelloController ف index غادي ندير تغيير على الكود كنزيد variable سميتها repository لي فيها ل fonction getRepository لي كتاخذ إسم ل Entity هنا عطيناها Article.

منبعد بل fonction findAll ديال repository كنسترجع les articles كاملين وكنرسلهم للصفحة hello.html.twig.

الكود لي زدنا ف HelloController هو :

                                //
<?php

namespace App\Controller;
use App\Entity\Article;
use Symfony\Component\Routing\Annotation\Route;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;

class HelloController extends AbstractController
{
    /**
    * @Route("/hello")
    */
    public function index()
    {
        $repository = $this->getDoctrine()->getRepository(Article::class);
        $posts = $repository->findAll();

        return $this->render('hello.html.twig',[
            'posts' => $posts
        ]);
    }
}
                            

2- إسترجاع article بل id ديالو

دبا يلا مشيتي http://127.0.0.1:8000/hello غادي تلقى les articles لي عندنا فقاعدة البيانات هما لي عندنا كيف كتشوف فالصورة :



منبعد باش نسترجع article بل id ديالو غادي نزيد fonction show لي كتاخد ل id ديال ل article ومنبعد كنخدم بنفس الكود السابق كنبدل فقط ل fonction لي كتولي find وكنعطيها ل id.

ل article لي كنسترجع كنرسلو للصفحة show.html.twig لي غادي نزيدوها من بعد.

الكود لي زدنا ف HelloController هو :

                                //
<?php

namespace App\Controller;
use App\Entity\Article;
use Symfony\Component\Routing\Annotation\Route;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;

class HelloController extends AbstractController
{
    /**
    * @Route("/hello")
    */
    public function index()
    {
        $repository = $this->getDoctrine()->getRepository(Article::class);
        $posts = $repository->findAll();

        return $this->render('hello.html.twig',[
            'posts' => $posts
        ]);
    }
    /**
     * @Route("/hello/show/{id}", name="article_show")
     */
    public function show($id){
        $repository = $this->getDoctrine()->getRepository(Article::class);
        $post = $repository->find($id);
        return $this->render('show.html.twig',['post'=>$post]);
    }
}
                            

3- إضافة الصفحة الخاصة بعرض article

منبعد غادي نزيد fichier جديد ف templates سميه show.html.twig غادي يكون فيه الكود لي كيعرض ل article لي اختارينا ولي جانا من show.

فتقريبا نفس الكود فقط ال boucle لي حيدناها فيلا مشيتي ل http://127.0.0.1:8000/hello/show/1 هنا  كنعطي ل id واحد غادي نعرض ل article مول ل id واحد كيف كنشوف فالصورة :



الكود ديال show.html.twig هو :

                                //
<!DOCTYPE html>
<html>
    <head>
        <meta charset="UTF-8">
        <title>{% block title %}{{post.title}} !{% endblock %}</title>
        {% block stylesheets %}
            <link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.2.1/css/bootstrap.min.css" integrity="sha384-GJzZqFGwb1QTTN6wy59ffF1BuGJpLSa9DkKMp0DgiMDm4iYMj70gZWKYbI706tWS" crossorigin="anonymous">
        {% endblock %}
    </head>
    <body>
        <div class="container">
            {% block body %}
                <div class="row mt-4">
                    <div class="col-md-6 mx-auto">
                        <div class="card bg-light rounded">
                            <div class="container-fluid">
                                <h3 class="card-title text-default p-4">
                                    {{post.title}}
                                </h3>
                                <hr>
                            </div>
                            <div class="card-body mt-2 rounded">
                                {{post.body}}
                            </div>
                        </div>
                    </div>
                </div>
            {% endblock %}
        </div>
        {% block javascripts %}
            <script src="https://code.jquery.com/jquery-3.3.1.slim.min.js" integrity="sha384-q8i/X+965DzO0rT7abK41JStQIAqVgRVzpbzo5smXKp4YfRvH+8abtTE1Pi6jizo" crossorigin="anonymous"></script>
            <script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.14.6/umd/popper.min.js" integrity="sha384-wHAiFfRlMFy6i5SRaxvfOCifBUQy1xHdJ/yoi7FRNXMRBu5WHdZYu1hA6ZOblgut" crossorigin="anonymous"></script>
            <script src="https://stackpath.bootstrapcdn.com/bootstrap/4.2.1/js/bootstrap.min.js" integrity="sha384-B0UglyR+jN6CkvvICOB2joaf5I4l3gm9GU6Hc1og6Ls7i6U/mkkaduKaBhlAXv9k" crossorigin="anonymous"></script>
        {% endblock %}
    </body>
</html>