Laptop Store ب Symfony 6 Darija الجزء الخامس
فهاد الجزء الخامس من Laptop Store ب Symfony 6 Darija غادي نزيدو أدمن فقاعدة البيانات من بعد غادي نشوفوا كيفاش نزيدو product نديرو عليه تعديل أو حذفه.
نظرة سريعة بالفيديو
1- إضافة Login Form
منبعد غادي نزيدو dossier ف templates سميه security فيه زيد fichier سميه login.html.twig لي غادي تكون فيه الفورم ديال Login.
الكود ديال الملف هو :
//
{% extends 'base.html.twig' %}
{% block title %}Log in!{% endblock %}
{% block body %}
<div class="row my-5">
<div class="col-md-6 mx-auto">
<div class="card">
<div class="card-header">Log in</div>
<div class="card-body">
<form method="post">
{% if error %}
<div class="alert alert-danger">{{ error.messageKey|trans(error.messageData, 'security') }}</div>
{% endif %}
{% if app.user %}
<div class="mb-3">
You are logged in as {{ app.user.username }}, <a href="{{ path('app_logout') }}">Logout</a>
</div>
{% else %}
<h1 class="h3 mb-3 font-weight-normal">Please sign in</h1>
<label for="inputUsername">Username</label>
<input type="text" value="{{ last_username }}" name="username" id="inputUsername" class="form-control my-2" autocomplete="username" required autofocus>
<label for="inputPassword">Password</label>
<input type="password" name="password" id="inputPassword" class="form-control" autocomplete="current-password" required>
<input type="hidden" name="_csrf_token"
value="{{ csrf_token('authenticate') }}"
>
{#
Uncomment this section and add a remember_me option below your firewall to activate remember me functionality.
See https://symfony.com/doc/current/security/remember_me.html
<div class="checkbox mb-3">
<label>
<input type="checkbox" name="_remember_me"> Remember me
</label>
</div>
#}
<button class="btn btn-lg btn-primary my-2" type="submit">
Sign in
</button>
{% endif %}
</form>
</div>
</div>
</div>
</div>
{% endblock %}
2- إضافة ل Admin
من بعد غادي نزيدو أدمن هنا غادي نخدموا ب Symfony Fixtures لي كتخلينا نزيدو معلومات مباشرة ف table لي بغينا.
أول حاجة خصنا نزيدو ل package بهاد Symfony Command:
composer require --dev orm-fixtures
منبعد ف src شوف dossier DataFixtures يلا مكانش زيدو وفيه fichier AppFixtures.php حتى هو يلا مكانش زيدو وفيه غادي نزيد الكود باش نزيد الأدمن.
من بعد دير هاد ال commande باش يتزاد الأدمن :
php bin/console doctrine:fixtures:load
الكود ديال الملف هو :
//
<?php
namespace App\DataFixtures;
use App\Entity\User;
use Doctrine\Persistence\ObjectManager;
use Doctrine\Bundle\FixturesBundle\Fixture;
use Symfony\Component\PasswordHasher\Hasher\UserPasswordHasherInterface;
class AppFixtures extends Fixture
{
private $passwordHasher;
public function __construct(UserPasswordHasherInterface $passwordHasher)
{
$this->passwordHasher = $passwordHasher;
}
public function load(ObjectManager $manager): void
{
$user = new User();
$plainPassword = "admin1234";
$hashedPassword = $this->passwordHasher
->hashPassword($user, $plainPassword);
$user->setUsername('admin');
$user->setPassword($hashedPassword);
$user->setRoles(['ROLE_ADMIN']);
$manager->persist($user);
$manager->flush();
}
}
3- إضافة Product Form
منبعد ف dossier Form زيد fichier سميه ProductType.php لي غادي تكون فيه الفورم ديال إضافة وتعديل product.
الكود ديال الملف هو :
//
<?php
namespace App\Form;
use App\Entity\Product;
use App\Entity\Category;
use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Bridge\Doctrine\Form\Type\EntityType;
use Symfony\Component\OptionsResolver\OptionsResolver;
use Symfony\Component\Form\Extension\Core\Type\FileType;
use Symfony\Component\Form\Extension\Core\Type\SubmitType;
class ProductType extends AbstractType
{
public function buildForm(FormBuilderInterface $builder, array $options): void
{
$builder
->add('name')
->add('description')
->add('price')
->add('quantity')
->add('image',FileType::class,[
'required' => false,
'mapped' => false,
])
->add('category',EntityType::class,[
'class' => Category::class
])
->add('Submit',SubmitType::class)
;
}
public function configureOptions(OptionsResolver $resolver): void
{
$resolver->setDefaults([
'data_class' => Product::class,
]);
}
}
4- إضافة Create Product View
منبعد غادي نزيدو fichier ف dossier product سميه create.html.twig لي غادي تعرض فيه الفورم ديال إضافة product.
الكود ديال الملف هو :
//
{% extends 'base.html.twig' %}
{% block title %}Create Product{% endblock %}
{% block body %}
<div class="row my-4">
<div class="col-md-8 mx-auto">
<div class="card">
<div class="card-header">
Create new product
</div>
<div class="card-body">
{{form(form)}}
</div>
</div>
</div>
</div>
{% endblock %}
5- إضافة Edit Product View
منبعد غادي نزيدو fichier ف dossier product سميه edit.html.twig لي غادي تعرض فيه الفورم ديال تعديل product.
الكود ديال الملف هو :
//
{% extends 'base.html.twig' %}
{% block title %}Update Product{% endblock %}
{% block body %}
<div class="row my-4">
<div class="col-md-8 mx-auto">
<div class="card">
<div class="card-header">
Update product
</div>
<div class="card-body">
{{form(form)}}
</div>
</div>
</div>
</div>
{% endblock %}