Giter Club home page Giter Club logo

course-symfony-1's Introduction

Toham

🚀 About Me

I'm a Symfony developer since 2010 ! I like to share what I do with my community on Twitch.

  • 🏡️ I'm currently working at @yousign !
  • 📬️ How to reach me : @toham_tech
  • 🏢️ I am not available for missions or jobs !

👉️ Connect with me

linkedin

twitter

youtube

twitch

discord

🖥️ My favorite stack

Find the list of technologies I like to use in my daily life.

PHP Symfony SQL HTML5 CSS3 SASS Tailwind Javascript React Python Github Actions

Top Langs

TBoileau's wakatime stats

📈️ Here are some stats

Thomas Boileau's GitHub stats

My contributions and active projects

Symfony

course-symfony-1's People

Watchers

 avatar

course-symfony-1's Issues

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.

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 et flush) dans le contrôleur
  • Récupérer la liste des Person en utilisant la méthode findAll du repository
  • Création de fixtures

Commandes utiles (php bin/console) :

  • doctrine:database:creatre : pour créer la base de données
  • make:migration : pour générer un fichier de migration, qui va comparer la structure actuelle avec les entités mappés
  • doctrine:migrations:migrate : pour exécuter le ou les migrations
  • doctrine:fixtures:load : pour charger les fixtures en base de données
  • make:entity : pour générer une entité pas à pas

Mapping de l'entité Person :

  • id : Clé primaire, de type integer, auto-incrémenté
  • firstName : type string
  • lastName : type string
  • email : type string

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 et Person
  • Implémentation d'un Voter
  • Modifier le contrôleur PersonController pour restreindre les actions update et delete en utiliser soit la méthode denyAccessUnlessGranted ou l'attribut IsGranted
  • Ajouter dans la vue qui liste les personnes, un contrôle sur les actions "Modifier" et "Supprimer" en utilisant la fonction is_granted

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"

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 formulaire
  • form_start : pour ouvrir le formulaire
  • form_end : pour fermer le formulaire
  • form_errors : pour afficher des messages d'erreur
  • form_row : pour afficher le label et son input
  • form_label : pour afficher le label
  • form_widget : pour afficher l'input
  • form_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

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

14 - Exercice N°4

  • Implémenter l'entité User en utilisant la commande php bin/console make:user
  • Modifier la méthode getRoles, si l'utilisateur est un administrateur alors renvoyer un tableau contenant ROLE_ADMIN sinon ROLE_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 routes login et login
  • Créer la vue login.html.twig qui contiendra le formulaire de connexion avec les champs nécessaire de type email et password (attention le nom des champs n'ont pas le même nom)
  • Modifier le fichier config/packages/security.yaml et notamment le firewall main pour mettre en place l'authentification par formulaire.
  • Modifier le access_control dans config/packages/security.yaml pour respecter la règle de gestion suivante : pour accéder à l'application, il faut être connecté.
  • Ajouter un ``role_hierarchydansconfig/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 : string
  • password : string
  • admin : bool

Ressource :

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

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo 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.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.