Blog ب symfony الجزء الخامس


فهاد الجزء الخامس من Blog ب Symfony 4 غادي نشوفوا كيفاش نتعاملو مع login system فغادي نمكنوا المستخدمين ديالنا من أنهم يتسجلوا ومن بعد يتكونيكطاو أو يديكونيكطاو. 

نظرة سريعة بالفيديو

1- إضافة الملف SecurityController

فباش نمكن المستخدم من تسجيل الدخول ديالو غادي نزيدو controller جديد سميه SecurityController فيه ل fonction login لي كتعرض الفورم لي غادي نزيدوها من بعد فملف سميتو login.html.twig و fonction logout لي كتبقى خاوية ف symfony 4 أطوماتيكيا كتعرف بلي راه غادي يديكونيكطا المستخدم.

الكود ديال الملف SecurityController.php هو :

                                //
<?php

namespace App\Controller;
use Symfony\Component\Routing\Annotation\Route;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Security\Http\Authentication\AuthenticationUtils;
use Symfony\Component\HttpFoundation\RedirectResponse;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;


class SecurityController extends AbstractController
{
    /**
     * @Route("/login", name="security_login")
     */
    public function login(AuthenticationUtils $authenticationUtils)
    {
        return $this->render('security/login.html.twig', [
            'last_username' => $authenticationUtils->getLastUsername(),
            'error' => $authenticationUtils->getLastAuthenticationError()
        ]);
    }

    /**
    *@Route("/logout",name="security_logout")
    */
    public function logout(){

    }
}
                            

2- إضافة فورم تسجيل الدخول

ف dossier templates زيد dossier جديد سميه security فيه زيد ملف جديد سميه login.html.twig.

داخل الملف غادي تكون الفورم لي كترسل المعلومات ل route security_login لي سبق وزدنا ولي كتمكن المستخدم باش يسجل الدخول ديالو.

الكود ديال الملف login.html.twig هو :

                                //
{% extends 'base.html.twig' %}

{% block title %}Connexion{% endblock %}

{% block body %}
    <div class="col-md-8 post mx-auto">
        {% if error %}
            <div>{{ error.messageKey|trans(error.messageData, 'security') }}</div>
        {% endif %}
        <div class="card text-default">
            <div class="card-body">
            <h4 class="card-title mb-4">Connexion</h4>
            <hr>
            <form action="{{path('security_login')}}" method="post">
                <div>
                    <div class="form-group">
                        <label for="username">Pseudo*</label>
                        <input type="text" name="_username" id="username" required class="form-control">
                    </div>
                    <div class="form-group">
                        <label for="password">Mot de passe*</label>
                        <input type="password" name="_password" id="password" required class="form-control">
                    </div>
                    <div class="form-group">
                        <button class="btn btn-primary" id="login" name="login">
                            Valider
                        </button>
                    </div>
                    <input type="hidden" name="_csrf_token" value="{{csrf_token('authenticate')}}">
                    <input type="hidden" name="_target_path" value="{{app.request.get('redirect_to')}}">
                </div>
            </form>
            </div>
        </div>
    </div>    
{% endblock %}
                            

3- إضافة فورم تسجيل مستخدم جديد

من بعد غادي ندوزو لإضافة مستخدم جديد فغادي نمشي ل dossier src فيه زيد dossier جديد سميه Form فيه غادي نزيد fichier جديد سميه UserType.php.

داخل الملف غادي نحدد الحقول لي غادي يكونوا عندي ففورم التسجيل ولي هما نفس المعلومات لي زدنا فل Entity User.

الكود ديال الملف UserType.php هو :

                                //
<?php
namespace App\Form;
use App\Entity\User;
use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Component\Form\Extension\Core\Type\SubmitType;
use Symfony\Component\Form\Extension\Core\Type\TextareaType;
use Symfony\Component\Form\Extension\Core\Type\EmailType;
use Symfony\Component\Form\Extension\Core\Type\TextType;
use Symfony\Component\Form\Extension\Core\Type\RepeatedType;
use Symfony\Component\Form\Extension\Core\Type\PasswordType;
use Symfony\Component\OptionsResolver\OptionsResolver;

class UserType extends AbstractType
{
    public function buildForm(FormBuilderInterface $builder, array $options)
    {
        //building the form
        $builder
            ->add('fullname',TextType::class,['label' => 'Nom & Prénom'])
            ->add('username',TextType::class,['label' => 'Pseudo'])
            ->add('email',EmailType::class,['label' => 'Email'])
            ->add('plainPassword',RepeatedType::class,[
                'type' => PasswordType::class,
                'first_options' => ['label' => 'Mot de passe'],
                'second_options' => ['label' => 'Confirmation']
            ])
            ->add('valider', SubmitType::class)
        ;
    }
    public function configureOptions(OptionsResolver $resolver)
    {
        //every form should know which class will use
        $resolver->setDefaults([
            'data_class' => User::class,
        ]);
    }
}
                            

4- إضافة الملف UsersController

فباش نمكن المستخدم من التسجيل غادي نزيدو controller جديد سميه UsersController فيه ل fonction register لي كتستقبل المعلومات من الفورم يلا رسلها المستخدم وكتزيدها فقاعدة البيانات وفي حالة العكس كنعرض الفورم لي كنرسلها لملف سميتو  register.html.twig ولي غادي نزيدوه من بعد.


الكود ديال الملف UsersController.php هو :

                                    //
<?php

namespace App\Controller;
use App\Form\UserType;
use App\Entity\User;
use Symfony\Component\Routing\Annotation\Route;
use Symfony\Bundle\FrameworkBundle\Controller\Controller;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\Security\Core\Encoder\UserPasswordEncoderInterface;


class UsersController extends Controller
{
    /**
     * @Route("/register",name="register_user")
     */
    public function register(Request $request,UserPasswordEncoderInterface $passwordEncoder){
        $user = new User();
        $form = $this->createForm(UserType::class,$user);
        //get request
        $form->handleRequest($request);
        //check if form is valid
        if($form->isSubmitted() && $form->isValid()){
            //encode password
            $password = $passwordEncoder->encodePassword(
                $user,$user->getPlainPassword()
            );
            $user->setPassword($password);
            $user->setRoles([User::ROLE_USER]);
            //add data to database
            $entityManager = $this->getDoctrine()->getManager();
            $entityManager->persist($user);
            $entityManager->flush();
            $this->addFlash(
                'notice',
                'Compte crée avec succés!'
            );
            //redirect user to blog index
            return $this->redirectToRoute('blog');
          
        }
        return $this->render('users/register.html.twig',[
            'form' => $form->createView()
        ]);
    }
}
                                

5- عرض فورم تسجيل مستخدم جديد

غادي نمشي ل dossier users فيه زيد fichier جديد سميه register.html.twig .

داخل الملف غادي نعرض الفورم لي جاتني من ل fonction register لي زدنا فل UsersController.php.

الكود ديال الملف register.html.twig هو :

                                    //
{% extends 'base.html.twig' %}

{% block title %}Inscription{% endblock %}

{% block body %}
    <div class="col-md-8 post mx-auto">
        <div class="card text-default">
            <div class="card-body">
            <h4 class="card-title mb-4">Inscription</h4>
            <hr>
            {{ form(form) }}
            </div>
        </div>
    </div>    
{% endblock %}
                                


إشترك في قناتنا على اليوتيوب

بحث في الموقع


إشترك للتوصل بالجديد