Blog ب symfony الجزء الخامس
نظرة سريعة بالفيديو
1- إضافة الملف SecurityController
//
<?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- إضافة فورم تسجيل الدخول
//
{% 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- إضافة فورم تسجيل مستخدم جديد
//
<?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
//
<?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- عرض فورم تسجيل مستخدم جديد
//
{% 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 %}