Symfony2 - les bundles Achref El Mouelhi 08 Novembre 2017, POEC PHP 2017 1 / 24
Symfony2 - les bundles
Achref El Mouelhi
08 Novembre 2017, POEC PHP 2017 1 / 24
Plan
1 Introduction
2 Creation
3 Gestion de routes
4 Les controleurs
5 Exemple
08 Novembre 2017, POEC PHP 2017 2 / 24
Introduction
Les bundles
Definitionest une brique de notre application
regroupe toutes les ressources qui concerne une memefonctionnalite
controleurs,
vues,
modeles,
fichiers CSS,
JavaScript,
classes personnelles...
08 Novembre 2017, POEC PHP 2017 3 / 24
Introduction
Les bundles
Pourquoi? !
Permet de diviser l’application en un ensemble de fonctionnalites
D’echanger des Bundles entre applications
Reutiliser des Bundles sur d’autres applications
Utiliser des Bundles deja realises par d’autres
Les bundles de la communautehttp://knpbundles.com/
08 Novembre 2017, POEC PHP 2017 4 / 24
Introduction
Les bundles
Pourquoi? !
Permet de diviser l’application en un ensemble de fonctionnalites
D’echanger des Bundles entre applications
Reutiliser des Bundles sur d’autres applications
Utiliser des Bundles deja realises par d’autres
Les bundles de la communautehttp://knpbundles.com/
08 Novembre 2017, POEC PHP 2017 4 / 24
Introduction
Les bundles
Exemple : gestion de formation
Bundle QCM
Bundle Cours
Bundle utilisateur (stagiaire, formateur, administrateur,moderateur...)
Bundle general pour gerer les differents bundles utilises
08 Novembre 2017, POEC PHP 2017 5 / 24
Introduction
Les bundles
StructureController : les controleurs
DependencyInjjection :informations sur le bundle (injectionde dependances)
Entity : les modeles
Form : les formulaires
Resourcesconfig : fichiers de configurations
public : les fichiers JavaScript, CSS...
views : vues, template Twig
Tests : tests unitaires
08 Novembre 2017, POEC PHP 2017 6 / 24
Creation
Les bundles
Ajouter php au Path de Windows
Allez dans Panneau de configuration > [Systeme et securite >]Systeme > Parametres systeme avances)Cliquez sur Variables d’environnementDans Variables systeme, double-cliquez sur PathSaisissez le repertoire PHP en ajoutant ’ ;’ a la fin(C : \wamp\bin\php\php5.5.12;)Cliquez sur OKRedemarrez la console
08 Novembre 2017, POEC PHP 2017 7 / 24
Creation
Les bundles
Creation d’un bundleDans la console, se placer dans le repertoire SymfonyExecuter la commande php app/console generate:bundle
Le nom du namespace compose de :Le namespace du bundle (racine du bundle) : par exempleBundle name : Nom du bundle PersonneLe suffixe du nom du bundle doit etre Bundle
Au final, je peux avoir par exemple : Root\PersonneBundle
08 Novembre 2017, POEC PHP 2017 8 / 24
Creation
Les bundles
Le nom du bundlePar convention, c’est celui du namespace sans (anti)slashC’est celui par defaut
Dans notre cas on peut avoir par exemple : RootPersonneBundle
Pour le resteOn garde les configurations par defaut de SymfonyPour le format de configuration, on choisit yml
08 Novembre 2017, POEC PHP 2017 9 / 24
Creation
Les bundles
Pour testerAller sur http://localhost/Symfony/web/app dev.php/hello/john
Pour mieux comprendre, ouvrir le fichier index.html.twig situe dansC:\wamp\www\Symfony\src\Root\PersonneBundle\Resources\views\DefaultEntourer le contenu de cette page par les balises html et body
Actualiser l’URL
Symfony2
a genere la structure du bundle
a enregistre notre bundle aupres du Kernel (voir app/AppKernel.php)
a defini la route aupres du Router (voir Resources/config/routing.yml)
08 Novembre 2017, POEC PHP 2017 10 / 24
Creation
Les bundles
Pour testerAller sur http://localhost/Symfony/web/app dev.php/hello/john
Pour mieux comprendre, ouvrir le fichier index.html.twig situe dansC:\wamp\www\Symfony\src\Root\PersonneBundle\Resources\views\DefaultEntourer le contenu de cette page par les balises html et body
Actualiser l’URL
Symfony2
a genere la structure du bundle
a enregistre notre bundle aupres du Kernel (voir app/AppKernel.php)
a defini la route aupres du Router (voir Resources/config/routing.yml)
08 Novembre 2017, POEC PHP 2017 10 / 24
Creation
Les bundles
En cas d’erreur d’autoload en fin d’installationIl faut aller dans composer.jsonEt modifier les lignes suivantes
"psr-4": {"": "src/"
},
Ensuite executercomposer dump-autoload
08 Novembre 2017, POEC PHP 2017 11 / 24
Gestion de routes
Symfony2 : schematisation
Adresse 1
Adresse 2
.
.
.
Adresse n
Controleur frontal Kernel Symfony2
Routeur
Controleur 1
Controleur 2
.
.
.
Controleur n
Modele Vue
Page HTMLInterceptionde requete
Recherchecontroleur
adequat
Execution
Demandede donnees
Constructionpage HTML
08 Novembre 2017, POEC PHP 2017 12 / 24
Gestion de routes
Fonctionnement du routeur
Controleur frontal Kernel Symfony2
Routeur
Route 1 : /pageU ⇒ pageUCtrl
.
.
.
Route i : /pageX ⇒ pageXCtrl
.
.
.
Route n : /pageZ ⇒ pageZCtrl
Controleur adequatGET /pageX
Recherchecontroleuradequat
Route ducontroleuradequat
Execution
Route
trouvee
08 Novembre 2017, POEC PHP 2017 13 / 24
Gestion de routes
Fonctionnement du routeur
FonctionnementLe controleur frontal demande au Kernel quel controleur executerpour la pageX
Ce dernier consulte son routeur
Le routeur parcourt son fichier routing.yml pour determiner laroute du controleur a executer pour la pageX
Quand il retrouve la route, il la retourne au Kernel qui se chargede l’execution du controleur adequat a la pageX
08 Novembre 2017, POEC PHP 2017 14 / 24
Gestion de routes
Format des routes
Plusieurs methodes pour definir les routesLes Annotations (@)
Les fichiers de configurations
YAML (YAML Ain’t Markup Language)
XML
PHP
08 Novembre 2017, POEC PHP 2017 15 / 24
Gestion de routes
Le fichier routing.yml
Chaque route est compose de trois partiesnom de la route : il faut qu’il soit unique
path : chemin d’acces /path / URL + parametre
defaults : les parametres de la route
controller : contient l’action qui sera execute et le controleurqui sera appele (On peut trouver plusieurs actions dans uncontroleur)
08 Novembre 2017, POEC PHP 2017 16 / 24
Gestion de routes
Le fichier routing.yml
Exemple :
root_personne_homepage:path: /hello/{name}defaults: { _controller: RootPersonneBundle:Default:index }
Explicationroot personne homepage : nom de la route
/hello/{name} : URL + parametre name
RootPersonneBundle:Default:index
Le controleur est situe a :src\Root\PersonneBundle\Controller\nom : DefaultController.php
Methode appelee : indexAction()
08 Novembre 2017, POEC PHP 2017 17 / 24
Gestion de routes
Le fichier routing.yml
Autres proprietes
root_personne_add:path: /add/personne/{id}defaults:_controller: RootPersonneBundle:Personnage:deleteid: 5
requirements:id: \d{1}
Explication
id: 5 : valeur par defaut pour id c’est 5
La section requirements est utilisee pour exprimer nosexigences sur les parametres d’une routeid: \d1 : id contient un seul chiffre
08 Novembre 2017, POEC PHP 2017 18 / 24
Les controleurs
Le controleur
Le controleurest le gendarme de notre application
communique avec les autres composants :
formulaire
base de donnees (modeles)
template twig (vues)
gere l’acces aux donnees pour les differents utilisateurs de notreapplication
08 Novembre 2017, POEC PHP 2017 19 / 24
Les controleurs
Controleur par defaut : DefaultController.php
namespace Root\PersonneBundle\Controller;use Symfony\Bundle\FrameworkBundle\Controller\Controller;class DefaultController extends Controller{
public function indexAction($name){return $this->render(’RootPersonneBundle:Default:index.html.twig’, array(’name’ => $name));
}}
Explication
namespace Root\PersonneBundle\Controller; : definir le chemin d’acces
use Symfony\Bundle\FrameworkBundle\Controller\Controller; : importationclasse Controller
return $this->render(’RootPersonneBundle:Default:index.html.twig’,
array(’name’ => $name));
index.html.twig : template appele situe asrc\Root\PersonneBundle\Resources\views dans lerepertoire Defaultarray(’name’ => $name) : Parametre passe au template
08 Novembre 2017, POEC PHP 2017 20 / 24
Les controleurs
Le controleurrouting.yml
root_personne_homepage:path: /hello/{name}defaults: { _controller: RootPersonneBundle:Default:index }
DefaultController.php
namespace Root\PersonneBundle\Controller;use Symfony\Bundle\FrameworkBundle\Controller\Controller;class DefaultController extends Controller{
public function indexAction($name){return $this->render(’RootPersonneBundle:Default:index.html.twig’, array(’name’ => $name));
}}
Quelques conventions
la methode qui s’appelle index dans le routeur doit etre appeleindexAction() dans le controleur
08 Novembre 2017, POEC PHP 2017 21 / 24
Exemple
Afficher Hello world
routing.yml
root_personne_homepage:path: /hello/{name}defaults: { _controller: RootPersonneBundle:Default:index }
hello_world:path: /hello-worlddefaults: { _controller: RootPersonneBundle:Default:index2 }
08 Novembre 2017, POEC PHP 2017 22 / 24
Exemple
Afficher Hello world
DefaultController.php
namespace Root\PersonneBundle\Controller;use Symfony\Bundle\FrameworkBundle\Controller\Controller;use Symfony\Component\HttpFoundation\Response;class DefaultController extends Controller{
public function indexAction($name) {return $this->render(’RootPersonneBundle:Default:index.html.twig’, array(’name’ =>$name));
}public function index2Action() {
return new Response("Hello World");}
}
08 Novembre 2017, POEC PHP 2017 23 / 24
Exemple
Afficher Hello world
Testerhttp://localhost/Symfony/web/app dev.php/hello-world
Remarques
On peut aussi definir un deuxieme controleur dans le memebundle
08 Novembre 2017, POEC PHP 2017 24 / 24
Exemple
Afficher Hello world
Testerhttp://localhost/Symfony/web/app dev.php/hello-world
Remarques
On peut aussi definir un deuxieme controleur dans le memebundle
08 Novembre 2017, POEC PHP 2017 24 / 24