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

منذ 5 سنوات imadbelasri Symfony
SY

فهاد الدرس التاسع من دورة symfony 4 للمبتدئين غادي نكملوا الدورة ديالنا وغادي نشوفوا كيفاش نديرو التحقق من الحقول ديال لفورم واش valid أو لا لا من بعد غادي نشوفوا كيفاش نديرو البحث على article معين وكيفاش نعرضوا les articles مرتبين حسب الأحرف الأبجدية.


1- التحقق من أن الحقول عامرين ف symfony 4

باش ندير ل form validation ف symfony 4 كنمشي ل Entity لي بغيت نتحقق منها حنا غادي نمشيو ل Article.php تما غادي نخدم بحاجة سميتها Assert لي أول حاجة كنديرلها use ف top ديال الملف من بعد فوق كل حقل كنزيد ل validation لي بغيت مثلا هنا زدنا :
- Assert\NotBlank لي كتعني الحقل مخصوش يكون خاوي.
Assert\Length لي عطيتها min=10 ولي كتعني طول الحقل خصو يكون فوق 10 حروف.
عطيت نفس الشي ل title ول body يلا دخلتي جوج حروف فالحقول وضغطتي على ajouter غادي تلقى هاد النتيجة :



الكود ديال Article.php بعد التعديل هو :

                                                    
                                                        //
<?php

namespace App\Entity;
use Symfony\Component\Validator\Constraints as Assert;
use Doctrine\ORM\Mapping as ORM;

/**
 * Powma\ServiceBundle\Entity\Article
 *
 * @ORM\Entity
 * @ORM\Table(name="article")
 */

class Article
{
    /**
     * @ORM\Id()
     * @ORM\GeneratedValue()
     * @ORM\Column(type="integer")
     */
    private $id;

    /**
     * @ORM\Column(type="string",length=280)
     * @Assert\NotBlank()
     * @Assert\Length(min=10)
     */
    private $title;

    /**
     * @ORM\Column(type="text")
     * @Assert\NotBlank()
     * @Assert\Length(min=10)     
     */
    private $body;

    public function getId(){
        return $this->id;
    }
    //we dont need set function for id
    public function getTitle(){
        return $this->title;
    }
    
    public function getBody(){
        return $this->body;
    }
    
    public function setTitle($title) : void {
        $this->title = $title;
    }

    public function setBody($body) : void {
        $this->body = $body;
    }
}
                                                    
                                                

2- إضافة رسائل خاصة بعد التحقق

يلا شفتي فالصورة غادي تلقى الرسائل ديال الخطأ بالإنجليزية يلا بغيتي تبدلهم للغة لي بغيتي كنزيد حاجة سميتها minMessage لي هو الرسالة لي غادي تبان من بعد ل min لي حددتو فعشرة.

دبا يلا عاودتي دخلتي جوج حروف فالحقول وضغطتي على ajouter غادي تلقى هاد النتيجة :


الكود ديال Article.php بعد التعديل هو :

                                                        
                                                            //
<?php

namespace App\Entity;
use Symfony\Component\Validator\Constraints as Assert;
use Doctrine\ORM\Mapping as ORM;

/**
 * Powma\ServiceBundle\Entity\Article
 *
 * @ORM\Entity
 * @ORM\Table(name="article")
 */

class Article
{
    /**
     * @ORM\Id()
     * @ORM\GeneratedValue()
     * @ORM\Column(type="integer")
     */
    private $id;

    /**
     * @ORM\Column(type="string",length=280)
     * @Assert\NotBlank()
     * @Assert\Length(min=10,minMessage="Le champ doit avoir au moins 10 caractéres")
     */
    private $title;

    /**
     * @ORM\Column(type="text")
     * @Assert\NotBlank()
     * @Assert\Length(min=10,minMessage="Le champ doit avoir au moins 10 caractéres")     
     */
    private $body;

    public function getId(){
        return $this->id;
    }
    //we dont need set function for id
    public function getTitle(){
        return $this->title;
    }
    
    public function getBody(){
        return $this->body;
    }
    
    public function setTitle($title) : void {
        $this->title = $title;
    }

    public function setBody($body) : void {
        $this->body = $body;
    }
}
                                                        
                                                    

3- البحث عن article بواسطة العنوان

باش نبحث على article بالعنوان ديالو غادي نمشي ل HelloController غادي نزيد fonction سميتها search لي كتاخد العنوان لي كنبحث عليه منبعد غادي نخدم بل fonction findBy لي كتمكن من البحث على article ولي كنعطيها الحقل باش باغي نبحث هنا حددناه ف title وكنعطي العنوان لي دخلنا ك variable ديال البحث.

يلا مشيت ل http://127.0.0.1:8000/hello/search/samadi%20says%20hello انا عندي article لعنوان ديالو samadi says hello كيعطيني هاد النتيجة :



الكود ديال 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;
use App\Form\ArticleType;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\Form\FormFactoryInterface;
use Doctrine\ORM\EntityManagerInterface;
use Symfony\Component\Routing\RouterInterface;
use Symfony\Component\HttpFoundation\RedirectResponse;

class HelloController extends AbstractController
{
    private $formFactory;
    private $entityManagerInterface;
    private $router;

    public function __construct(FormFactoryInterface $formFactory,
    EntityManagerInterface $entityManagerInterface,
    RouterInterface $router){
        $this->formFactory = $formFactory;
        $this->entityManagerInterface = $entityManagerInterface;
        $this->router = $router;
    }
    /**
    * @Route("/hello", name="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]);
    }
    /**
     * @Route("/hello/search/{term}", name="article_search")
     */
    public function search($term){
        $repository = $this->getDoctrine()->getRepository(Article::class);
        $posts = $repository->findBy(['title'=>$term]);
        return $this->render('hello.html.twig',['posts'=>$posts]);
    }
    /**
     * @Route("/hello/add", name="article_add")
     */
    public function add(Request $request){
        $article = new article();
        $form = $this->formFactory->create(ArticleType::class,$article);
        //get request
        $form->handleRequest($request);
        //check if form is valid
        if($form->isSubmitted() && $form->isValid()){
            //add data to database
            $this->entityManagerInterface->persist($article);
            $this->entityManagerInterface->flush();
            //redirect user to blog index
            return new RedirectResponse(
                $this->router->generate('hello')
            );  
        }
        return $this->render('add.html.twig',[
            'form' => $form->createView()
        ]);
    }
}
                                                        
                                                    

4- عرض les articles مرتبين حسب الأحرف الأبجدية

باش نعرض les articles مرتبين بالعناوين حسب الأحرف الأبجدية غادي نمشي ل fonction index غادي ندير تعديل بلاصت من خدم بل fonction findAll غادي نخدم بل fonction findBy لي كنعطيها ل paramètre الأول خاوي والثاني كنعطي title والترتيب ASC يعني من A ل Z.
 
يلا مشيت ل http://127.0.0.1:8000/hello غادي نلقى هاد النتيجة :



الكود ديال 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;
use App\Form\ArticleType;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\Form\FormFactoryInterface;
use Doctrine\ORM\EntityManagerInterface;
use Symfony\Component\Routing\RouterInterface;
use Symfony\Component\HttpFoundation\RedirectResponse;

class HelloController extends AbstractController
{
    private $formFactory;
    private $entityManagerInterface;
    private $router;

    public function __construct(FormFactoryInterface $formFactory,
    EntityManagerInterface $entityManagerInterface,
    RouterInterface $router){
        $this->formFactory = $formFactory;
        $this->entityManagerInterface = $entityManagerInterface;
        $this->router = $router;
    }
    /**
    * @Route("/hello", name="hello")
    */
    public function index()
    {
        $repository = $this->getDoctrine()->getRepository(Article::class);
        $posts = $repository->findBy([],['title'=>'ASC']);

        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]);
    }
    /**
     * @Route("/hello/search/{term}", name="article_search")
     */
    public function search($term){
        $repository = $this->getDoctrine()->getRepository(Article::class);
        $posts = $repository->findBy(['title'=>$term]);
        return $this->render('hello.html.twig',['posts'=>$posts]);
    }
    /**
     * @Route("/hello/add", name="article_add")
     */
    public function add(Request $request){
        $article = new article();
        $form = $this->formFactory->create(ArticleType::class,$article);
        //get request
        $form->handleRequest($request);
        //check if form is valid
        if($form->isSubmitted() && $form->isValid()){
            //add data to database
            $this->entityManagerInterface->persist($article);
            $this->entityManagerInterface->flush();
            //redirect user to blog index
            return new RedirectResponse(
                $this->router->generate('hello')
            );  
        }
        return $this->render('add.html.twig',[
            'form' => $form->createView()
        ]);
    }
}
                                                        
                                                    

دروس ذات صلة

SY

دورة symfony 4 للمبتدئين الدرس الأول

فهاد الدورة الجديدة ولي غادي نخصصوها ل symfony 4 بناءا على الطلب ديال العديد من الزوار ديال الموقع غ...


SY

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

فهاد الدرس الثاني من دورة SYMFONY 4 للمبتدئين غادي نكملوا الدورة ديالنا من بعد ماشفنا كيفاش نزي...


SY

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

فهاد الدرس الثالت من دورة symfony 4 للمبتدئين غادي نشوفوا البنية ديال واحد ل page twig وكيفاش symfon...


SY

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

فهاد الدرس الرابع من دورة SYMFONY 4 للمبتدئين غادي نكملوا الدورة ديالنا وغادي نشوفوا كيفاش نعرضوا مج...


SY

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

فهاد الدرس الخامس من دورة symfony 4 للمبتدئين غادي نشوفوا كيفاش نتعاملوا مع قواعد البيانات ف symfony...


SY

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

فهاد الدرس السادس من دورة SYMFONY 4 للمبتدئين غادي نكملوا الدورة ديالنا منبعد ما زدنا قاعدة البيانات...


SY

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

فهاد الدرس السابع من دورة SYMFONY 4 للمبتدئين غادي نكملوا الدورة ديالنا منبعد مازدنا les articl...


SY

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

فهاد الدرس الثامن من دورة symfony للمبتدئين غادي نكملو الدورة ديالنا منبعد مشفنا كيفاش زدنا المعلوما...


SY

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

فهاد الدرس التاسع من دورة symfony 4 للمبتدئين غادي نكملوا الدورة ديالنا من بعد ما زدنا الفورم فالدرس...


SY

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

فهاد الدرس التاسع من دورة symfony 4 للمبتدئين غادي نكملوا الدورة ديالنا وغادي نشوفوا كيفاش نديرو الت...