course-symfony-1's People
course-symfony-1's Issues
1 - L'écosystème Symfony
- Génèse
- Chronologie
- Acteurs majeurs
- Veille technologique (Slack et Twitter)
13 - Exercice Bonus N°1
12 - Exercice N°3
- Remplacer le formulaire existant par un formulaire Symfony (
Form Type
) - Modifier la vue du formulaire pour utiliser les fonctions de Twig pour afficher le formulaire
- Modifier le traitement du formulaire dans le contrôleur
Liste des fonctions twig :
form
: pour afficher tout le formulaireform_start
: pour ouvrir le formulaireform_end
: pour fermer le formulaireform_errors
: pour afficher des messages d'erreurform_row
: pour afficher le label et son inputform_label
: pour afficher le labelform_widget
: pour afficher l'inputform_rest
: pour afficher tous les champs restant
Pour ajouter le thème Bootstrap de Symfony pour un bon affichage des formulaires, se référer au fichier config/packages/twig.yaml
3 - Création d'une première page avec Symfony
- Contrôleur
- Template Twig
11 - Exercice N°2
- Paramétrer la base de données dans
.env.local
- Implémenter l'entité
Person
- Création et exécution d'une migration
- Implémenter le repository
PersonRepository
- Remplacer l'écriture du fichier CSV par l'ajout d'un objet Person en base de données (
persist
etflush
) dans le contrôleur - Récupérer la liste des
Person
en utilisant la méthodefindAll
du repository - Création de fixtures
Commandes utiles (php bin/console) :
doctrine:database:creatre
: pour créer la base de donnéesmake:migration
: pour générer un fichier de migration, qui va comparer la structure actuelle avec les entités mappésdoctrine:migrations:migrate
: pour exécuter le ou les migrationsdoctrine:fixtures:load
: pour charger les fixtures en base de donnéesmake:entity
: pour générer une entité pas à pas
Mapping de l'entité Person
:
id
: Clé primaire, de typeinteger
, auto-incrémentéfirstName
: typestring
lastName
: typestring
email
: typestring
9 - Doctrine : Les relations
17 - Exercice N°17
- Implémenter une nouvelle propriété
file
dans Document, qui ne sera pas mappé par Doctrine, et qui ne sera utilisable que lorsque l'on effectue un POST - Traiter ce
file
seulement à la création dans le contrôleur : convertir un Base64 en fichier.
5 - Contrôleur
4 - Routeur
16 - Exercice N°6
Etape 1
- Création d'une route pour gérer l'ajout d'un document
- Trouver le moyen de récupérer le contenu de la requête HTTP, mais attention, inutile de regarder dans
$request->query
ou$request->request
- Injecter
SerializerInterface
- Implémenter la déserialisation
- Gérer la persistence
- Retourner la bonne réponse
Etape 2
- Ajouter des contraintes de validation dans l'entité
- Dans le contrôleur, gérer avec le ValidatorInterface, la validité de l'objet déserialisé
- Gérer le cas ou il y a des erreurs et retourner une 422 avec la liste des erreurs
Contraintes :
- title : obligatoire, nombre de caractère inférieur ou égal à 50
- filename : obligatoire, nombre de caractère inférieur ou égal à 150
- comment : facultatif, nombre de caractère inférieur ou égal à 255
- customer : obligatoire, doit être composer seulement de 5 chiffres
Etape 3
Gérer la modification d'un document, mais attention, on ne peut pas modifier la propriété filename
dans ce cas précis.
Tips : Pense au groupes de sérialisation Groups
7 - Exercice N°1
- Créer une page (
/inscription
) contenant un formulaire d'inscription (nom, prénom, email) - Traitement : j'ajoute dans un fichier CSV, une ligne contenant les 3 champs du formulaire
- Redirection vers une seconde page (
/
) qui liste les lignes du CSV
Indice :
- Gestion d'un fichier CSV, où doit se trouver le fichier en question ? Et pourquoi "public"
- Se renseigner sur la manière de boucler sur un tableau avec twig
- Pour créer un lien vers une page utiliser la fonction "path"
10 - Formulaires
6 - Twig
14 - Exercice N°4
- Implémenter l'entité
User
en utilisant la commandephp bin/console make:user
- Modifier la méthode
getRoles
, si l'utilisateur est un administrateur alors renvoyer un tableau contenantROLE_ADMIN
sinonROLE_USER
- Implémenter des fixtures pour avoir des utilisateurs en base de données
- Implémenter le contrôleur
UserController
et créer les 2 routeslogin
etlogin
- Créer la vue
login.html.twig
qui contiendra le formulaire de connexion avec les champs nécessaire de typeemail
etpassword
(attention le nom des champs n'ont pas le même nom) - Modifier le fichier
config/packages/security.yaml
et notamment le firewallmain
pour mettre en place l'authentification par formulaire. - Modifier le
access_control
dansconfig/packages/security.yaml
pour respecter la règle de gestion suivante : pour accéder à l'application, il faut être connecté. - Ajouter un ``role_hierarchy
dans
config/packages/security.yaml` pour expliquer que `ROLE_ADMIN` hérite de `ROLE_USER` - Bloquer l'accès à la page de création d'une personne au rôle
ROLE_ADMIN
Entité User
:
email
: stringpassword
: stringadmin
: bool
Ressource :
15 - Exercice N°5
Mettre en place la règle de gestion suivante : Seul le créateur d'une Person
ou un administrateur peut modifier ou supprimer une Person
. N'importe qui peut créer une Person
.
- Implémenter les fonctionnalités de modification et suppression d'une
Person
(Twig, Repository et Contrôleur), sans oublier d'ajouter les boutons "Modifier" et Supprimer" dans une colonne du tableau - Implémenter la relation entre
User
etPerson
- Implémentation d'un Voter
- Modifier le contrôleur
PersonController
pour restreindre les actionsupdate
etdelete
en utiliser soit la méthodedenyAccessUnlessGranted
ou l'attributIsGranted
- Ajouter dans la vue qui liste les personnes, un contrôle sur les actions "Modifier" et "Supprimer" en utilisant la fonction
is_granted
8 - Création de notre première entité
2 - Installation de Symfony
Pré-requis :
-
PHP >= 8.1
-
MySQL/MariaDB/SQLite
-
Extensions : Ctype, iconv, pcre, session, SimpleXML, Tokenizer
-
Composer
-
Installation du binaire de Symfony
-
Création d'un nouveau projet de type
webapp
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.