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

imadbelasri Symfony
SY

فهاد الجزء الخامس من 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 %}
                                                        
                                                    

دروس ذات صلة

SY

كيفاش تصاوب Notes Application ب symfony framework الجزء الأول

فهاد لمشروع الجديد غادي نشوفو كيفاش نقادو notes app ب symfony المهم هنا ماشي هي ل app لمهم هو تعرف ك...


SY

كيفاش تصاوب Notes Application ب symfony framework الجزء الثاني

فهاد الجزء الثاني من كيفاش تصاوب Notes Application ب symfony framework غادي نكملو الملفات لي غادي يع...


SY

كيفاش تصاوب Notes Application ب symfony framework الجزء الثالت

فهاد الجزء الثالت من كيفاش تصاوب Notes Application ب symfony framework غادي نشوفو الملفات الخاصين ب...


SY

Blog ب symfony 4 الجزء الأول

فهاد ال projet الجديد لي سبق ودرناه فالقناة غادي نشوفوا كيفاش نقادو blog ب symfony 4 ولي غادي نشوفوا...


SY

BLOG ب SYMFONY 4 الجزء الثاني

فهاد الجزء الثاني من BLOG ب SYMFONY 4 غادي نكملو ل projet ديالنا وغادي نزيدو أول controller ديا...


SY

BLOG ب SYMFONY 4 الجزء الثالت

فهاد الجزء الثالت من BLOG ب SYMFONY 4 غادي نكملوا ل projet ديالنا ونزيدو بعد الإعدادات لي غادي...


SY

BLOG ب SYMFONY 4 الجزء الرابع

فهاد الجزء الرابع من blog ب symfony 4 غادي نكملوا ل projet ديالنا ونشوفوا كيفاش نعرضوا les articles...


SY

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

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


SY

BLOG ب SYMFONY الجزء السادس

فهاد الجزء السادس من Blog ب symfony 4 غادي نكملوا ل projet ديالنا وغادي نزيدو إمكانية إضافة التعليقا...


SY

Laptop Store ب Symfony 6 Darija الجزء الأول

فهاد ل projet الجديد لي هو Laptop Store ب Symfony 6 Darija غادي نقادوا واحد store ديال الحواسيب بلا...