You are on page 1of 30

Sympony Notes

By HELALI HADIL :d
Introduction Symfony Symfony console make:controller
NomContrôleur

Installation symfony Permet de créer un contrôleur


Symfony serve
COMPOSER : comme npm pour php
Permet d’ouvrir un serveur Symfony
Version PHP installée : 8.0.3 ( la dernière (il faut ouvrir en parallèle les deux
version ) avec la commande php -v serveurs Apache et MYSQL )
Symfony
Les etapes pour creer un Projet symfony Affiche tous les options et les
informations nécessaires sur
1. Dans un dossier dans lequel on veut
symfony
héberger notre projet web , lancer la
commande

command symfony
Symfony new ProjectName --full
Il ya une configuration pour
2. Pointer sur le projet nouvellement chaque package
créé ( File -> ouvrir -> sélectionner le projet )
Symfony console Dev : l’environement de
developpement
NOTE : vendor doit configurer dans le Cette commande permet
projet / we have to add --full otherwise d’afficher toutes les
the Project created wouldn’t have doctrine, options de la console
template , tests , translations and other files Symfony
Concept de HTTP Root : request /Root
passed in the URL
URI vs URL •A URI is an identifier of
a specific resource. Like a
request Routes : routing
engines (root hethi
page, or book, or a
document. Tji ba3d nom
chkoun eli lehi beha
de domaine el kol
respons
?)
*: pointes to a •A URL is special type of

e certain controller identifier that also tells


Action : the method you how to access it,
excuted in the such as HTTPs, FTP,

How Symfony Works ? Controller etc.—like


https://www.google.com

request
Quick overview of twing
www.example .com/hello_world

response
Kernel Front Controller A Twig template is a text file that can generate
(HTML,JSON,etc
/AppKernel.php Index.php any type of content (HTML, XML, CSV, LaTeX, …).
…)
Twig defines two kinds of delimiters:
*/hello_world •{{ ... }}: like echo
•{% ... %}: Controls the logic of the template;
Routes
/route1 /route2 /…
Controller Action it is used to execute for loops and if statements,
for example
Example de TWING Créer un Controller
Deux manières :
• Manuellement : voir cours
index.html.twig
• Automatiquement : avec la
commande
Symfony console
make:controller
NomContrôleur

En composer json
« require-dev » : les
bibliothèques nécessaires en mode AutoController
développement

Pour ouvrir le serveur Symfony on doit


ouvrir le serveur Apache et MySQL / il faut
aussi que le serveur est connecté à une BD
existante dans le MyPHPAdmin

Barre ajoutée si le fichier HTML
contient un <body>

How to use git ?


1. Créer un répertoire
Dump de la requete
2. Exécuter la commande 5. Git add.
:
6. Git commit –m
git remote add “Commit”
origin
https://github.com/h 7. git push --set-
adilHelali/SymfonyPr upstream origin
ojectExample.git master

4. Git add.
Recupérer les paramètres de la requete Créer une BD NomBD
Commenter celle qui ne l’est pas au niveau de .env

Rooting
Ajouter des contraintes sur les paramètres passées dans le route
On utilise les expressions régulières
Pour générer les expressions régulières :
In the URL : https://regexr.com/
http://127.0.0.1:8000/second?name=Hadil

#Method: “GET”

Etape à chaque fois que je crée un nouveau projet


Au niveau de .env :

DATABASE_URL="mysql://root:@127.0.
0.1:3306/NomBD?serverVersion=5.7"
Comment insérer les requirements ?

Solution : reverse the order

Ordre des routes Généralisation de route dans un contrôleur et default

Le root key sera toujours sélectionné puisqu'il est


plus générique que le root page

@Method (« GET », »POST ») : is depricated ( no longer


used )
Premier exercice TWIG : Affichage d’un tableau
o Le traitement des routes : yabda ylawij bich
wa7da bil wa7da
o Les routes spécifiques 9bal les routes
génériques : générique tmaski el spécifique
debuger le bug :
symfony console router:match [URI]
-> routing fil barre de debuguage

Twig

o twig : directement intégrer dans symfony


( --full)
o affiche des variables stringyfied
o filtre : permet de formatter les strings
o {% for %} {% else %} : si le tableau
est vide ( nista3mlouh pour le tableau )
TwigFilter / TwigFunction : ism el function , [$this , ... ]
HOW TO MAKE A TWIG EXTENSION ?

What is a twig extension in the first place ?


To put it simple , it’s a personalized filter or a
function that we can use directly in twig FUNCTION : use this funct. and Use this one in both cases for the
comment the other declaration
To make a twig extension all you need to do is
excute the command : Deuxième exercice TWIG :
Symfony console make:twig-
Default Image
extension
And then a default twig-extension is created

Appellation du filtre

FILTER : use this funct. and comment the other


Suite de l’exercice 1 TWIG : Tableau
bich mano93odchi ntesti 3ala des elements particuliers
wa7adhom ( premier | dernier )
path du router : templates > path
o On peut avoir un autre moteur de templating autre que
twig
o Héritage dans twig : hérite des blocs fixes (html)
code nbadlou n3awid redef
parent : kima super
Kif des parties yit3awdou fil code
include : inclure du code html ( pour afficher un bout de
code ) | serveur de mail : lezimna url absolu
render : inclusion des controlleurs : n3ayit lil controlleur
n3adilou paramètre pour récupérer une partie (traitement
métier)
path : ken badalna el route mayitbadel chay (madem 5alit
el name)
On doit utiliser le mot clé set pour les blocs path([RootName],{Nompara1:para1 ... })
d’opérations de twig
Héritage : Template fille Héritage : Template parent

On définit les blocs qui peuvent changer d’un Template à un


autre et on ne peut pas écrire du code à l’extérieur de ces
blocs. Pour assurer l’héritage , on utilise le mot clé entends

Inclusion de Template Inclusion de contrôleur
Génération des liens avec twig Symfony vous fournit une variables globale app dans votre Template.
Cette variable vous permet d’accéder à plusieurs informations très
utiles.

Running webpack with npm


Doctrine Migrations

To make an entity :
symfony console make:entity

Configuration de l’application

In .env

Création de base de données selon .env


Add : @ROM\Table(name=‘’product’’)
To create the table in the database Auto-generated migration with the
command :
symfony console make:migration
command : After test connection (MySQL)
symfony console
doctrine:migrations:migrate
To excute the migration

Fonctionnalités Remove the version in


Relier la base de données avec l’IDE Fonctionnalités propres communes the database url

SELECT | READ
command : Persist(object) : add , update If a query is execute no need to put it in
symfony console If the id exist : update a migration
doctrine:migration:diff Else insert
Same thing as generate Flush() : execute the request
1 quest

In the data base

I need to make the entity and then the


migration !! To have this !!!
New one of the element product with 2 as an id

2 quests en une seule transaction

Add a new product

Delete a product
Fixtures Il faut tjr persister et flasher !!! Les relations

Order
*

*
Media Product
Queries 1 1

1
*

Category

Exécution de la commande :
php bin/console Yitzedou fil les fonctions mta3 el
doctrine:fixtures:load repository kima findall
We create a
php class of
trait type , then
we add attributs
and callbacks
And at the end
we create and
Démarche : créer une relation migrate the
migration
Then : make:migrations

Traits (~ l’interfaces )
Getters and
setters for the
attributs

callbacks
Les formulaires Adding the form in the controller

In twig.yaml
Create a form

Creating the
twig

After adding a list of catalogues in In Media.php Adding products created via the Form to
the data base the database

Solution ?
Adding _toString in Product.php

Works like Magic

In Category.php

Used to update and add


Les Services PROBLEME - Instanciation à chaque fois d’un service
- Amélioration de service -> plus de paramètres ->
ancien constructeur ne fonctionne pas -> il faut
Les services permettent de réutiliser le code changer les paramètres
Doctrine / repository / twig .. : se sont des services
Service Container
New Service1 (param1, param2); - Couplage forte : forte dépendance !

Class c2 {
Class c1 { Class c3 {
Service1 = new
Module Service1 = new
Service1(param1,param2);
Service2 = new Service2(...);
Service1(param1,param2); service3 = new Service3(...);
service3 ;
} }
}

View Requete
Controller Service3
SOLUTION :
Chef d’orchestre
Service2 ‐ une autre entité qui va s’occuper
de l’instanciation des services :
DAO
Service
Service1
_Contractor(param1, param2);
Dependancy Injection Container

DB Métier

Une classe doit être


il est important de grouper correctement ses
interfaces. Plus une interface est simpliste,
‐ Un service est une méthode | DIC
ouverte à l’extension et “atomique”, plus il est facile de distinguer les instancier un service une seule fois |
fermée à la modification contrats et leurs utilités. un service dépend d’autres services - Une seule instance de service
> il faut instancier les autres services
dont il a besoin
‐ Dépendance des autres services
Ordre d’instanciation
Class c1 {
Service1 = new
Service1(param1,param2);
}

Appel de service PDF


Une classe ou une Dans les actions d’héritages, de
méthode ne puisse surcharge, de l’utilisation des
Il faut injecter les
dépendances nécessaires à
Service1(PDF , Service2) Service2
faire qu’une et une propriétés de vos classes en une classe on donne à une
général, il faut faire attention à ce
seule chose que vos objets gardent les mêmes
classe ce dont elle a besoin
pour fonctionner. Service1
fondamentaux.
o Inversion of contrôle : au lieu que utilisateur ‐ On est en mode developpement -> en mode Création de service
instancie les services c’est le container qui fait ça !! production : il n’ya pas de debugger pour connaitre
Container->get(‘twig’): get a service from les erreurs
the container 1. Créer un dossier service sous le dossier src
Render : use the services

(LoggerInterface $logger)

Dans le controlleur : j’ai besoin que tu nous fournisse


une instance de type de l’interface (example : logger) Tous les erreurs s’affichent ici
Example : EntityManagerInterface $manager :
get an instance of Entity Manager
Pour utiliser un service : créer un attribut pour le ‐ Si on a besoin d’un logger au niveau du
service + [SERVICE]Interface $[SERVICE] au niveau du Controller , il suffit d’ajouter au niveau des
paramètres : LoggerInterface $logger 2. Créer une class qui sera le service
constructeur
‐ Dans le contrôleur :
$logger->(informations de logger)
symfony console debug:ccontainer :
afficher la liste des services utilizes dans le projet

Appel du service dans le controller 3. Ajouter des fonctions pour le service


Ajout d’un logger dans le service Configuration Injection des arguments

La ou la magie opère … On peut récupérer le defaultImagePath directement


Service.yml Pour les contrôleurs :

Partout :

We can’t consider entities as services because


they have a state ( état )

In logs Images dans /public/img

Récupérer la variable :

One of the main features of autowiring is that you


In dev.log can type-hint the arguments of the class
constructors or controller methods and Symfony
automatically injects the services associated Thin controller…
Best Symfony Practice Fat models …
with those type-hinted classes.
Sécurité Configuration : Security.yml Il faut créer une classe User pour assurer
l’authentification :
Symfony console make:user
Doctrine : gère les sql injections
La sécurité dans symfony est gérer par
security/bundle

Security bundle :
Symfony
documentation
Single sign-on server : plusieurs application qui
s’authentifient -> une seule authentification
Profiler : debugger
Lors de la création du projet symfony , on a utilisé
l’option –full qui Install tous y compris le
security bundle
Git Astuce In User entity : every user should have
an array for roles
Exercice
On va utiliser une fixture de groupe pour ne pas modifier
les autres données

Right Click > Git > show diff

LES FIXTURES :
Service de l’encodage de mot de
passe :
UserPasswordEncoderInterface :
‐ Fixture load : lance tous les fixtures

générer un mot de passe ‐ Fixture group : Group fixture exécute un fixture


particulier : le fixture doit implementer fixturegrouppinterface
Fil User class :

User interface : Salt : ybadel el mot de


‐ Fixture append : Mayfasa5ch données el 9dima
w yzid instead
passe
In database user :

Algorithme : Argon hash genorator | meme s’il s’agit du meme mot de passe on a
deux hash codes différents

FIXTURE GROUP :
ASTUCE : TO DO
Add the interface implements

Implement the getGroups method

Création de deux users : un user simple et un admin avec le


meme passeword : secret In the command line
GARD AUTHENTICATOR SecurityController
Symfony console make:auth

Redirect if successed to login

L’authenticator yit3ada 3ala kol chay !!!

Anonyme ne
le connait
pas
Login as student

In security.yml In UserFixture
Il faut implémenter cette méthode

EXERCICE Fil controller 3anna helper ema fil service


Chaque utilisateur qui crée le produit va ma3andich helper
être propriétaire du produit

In the controller : route: /product

Each user have a reference to ensure the


order and so we can attribut products to
each user

Fixture Dependancy

In the controller : route: /add Autorisation

In Security.yml

Add for the user

Update for the user

30

You might also like