Symfony2 - les bundles · 2017-11-21 · Creation´ Les bundles Creation d’un bundle´ Dans la...

27
Symfony2 - les bundles Achref El Mouelhi 08 Novembre 2017, POEC PHP 2017 1 / 24

Transcript of Symfony2 - les bundles · 2017-11-21 · Creation´ Les bundles Creation d’un bundle´ Dans la...

Page 1: Symfony2 - les bundles · 2017-11-21 · Creation´ Les bundles Creation d’un bundle´ Dans la console, se placer dans le repertoire Symfony´ Executer la commande´ php app/console

Symfony2 - les bundles

Achref El Mouelhi

08 Novembre 2017, POEC PHP 2017 1 / 24

Page 2: Symfony2 - les bundles · 2017-11-21 · Creation´ Les bundles Creation d’un bundle´ Dans la console, se placer dans le repertoire Symfony´ Executer la commande´ php app/console

Plan

1 Introduction

2 Creation

3 Gestion de routes

4 Les controleurs

5 Exemple

08 Novembre 2017, POEC PHP 2017 2 / 24

Page 3: Symfony2 - les bundles · 2017-11-21 · Creation´ Les bundles Creation d’un bundle´ Dans la console, se placer dans le repertoire Symfony´ Executer la commande´ php app/console

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

Page 4: Symfony2 - les bundles · 2017-11-21 · Creation´ Les bundles Creation d’un bundle´ Dans la console, se placer dans le repertoire Symfony´ Executer la commande´ php app/console

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

Page 5: Symfony2 - les bundles · 2017-11-21 · Creation´ Les bundles Creation d’un bundle´ Dans la console, se placer dans le repertoire Symfony´ Executer la commande´ php app/console

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

Page 6: Symfony2 - les bundles · 2017-11-21 · Creation´ Les bundles Creation d’un bundle´ Dans la console, se placer dans le repertoire Symfony´ Executer la commande´ php app/console

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

Page 7: Symfony2 - les bundles · 2017-11-21 · Creation´ Les bundles Creation d’un bundle´ Dans la console, se placer dans le repertoire Symfony´ Executer la commande´ php app/console

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

Page 8: Symfony2 - les bundles · 2017-11-21 · Creation´ Les bundles Creation d’un bundle´ Dans la console, se placer dans le repertoire Symfony´ Executer la commande´ php app/console

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

Page 9: Symfony2 - les bundles · 2017-11-21 · Creation´ Les bundles Creation d’un bundle´ Dans la console, se placer dans le repertoire Symfony´ Executer la commande´ php app/console

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

Page 10: Symfony2 - les bundles · 2017-11-21 · Creation´ Les bundles Creation d’un bundle´ Dans la console, se placer dans le repertoire Symfony´ Executer la commande´ php app/console

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

Page 11: Symfony2 - les bundles · 2017-11-21 · Creation´ Les bundles Creation d’un bundle´ Dans la console, se placer dans le repertoire Symfony´ Executer la commande´ php app/console

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

Page 12: Symfony2 - les bundles · 2017-11-21 · Creation´ Les bundles Creation d’un bundle´ Dans la console, se placer dans le repertoire Symfony´ Executer la commande´ php app/console

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

Page 13: Symfony2 - les bundles · 2017-11-21 · Creation´ Les bundles Creation d’un bundle´ Dans la console, se placer dans le repertoire Symfony´ Executer la commande´ php app/console

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

Page 14: Symfony2 - les bundles · 2017-11-21 · Creation´ Les bundles Creation d’un bundle´ Dans la console, se placer dans le repertoire Symfony´ Executer la commande´ php app/console

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

Page 15: Symfony2 - les bundles · 2017-11-21 · Creation´ Les bundles Creation d’un bundle´ Dans la console, se placer dans le repertoire Symfony´ Executer la commande´ php app/console

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

Page 16: Symfony2 - les bundles · 2017-11-21 · Creation´ Les bundles Creation d’un bundle´ Dans la console, se placer dans le repertoire Symfony´ Executer la commande´ php app/console

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

Page 17: Symfony2 - les bundles · 2017-11-21 · Creation´ Les bundles Creation d’un bundle´ Dans la console, se placer dans le repertoire Symfony´ Executer la commande´ php app/console

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

Page 18: Symfony2 - les bundles · 2017-11-21 · Creation´ Les bundles Creation d’un bundle´ Dans la console, se placer dans le repertoire Symfony´ Executer la commande´ php app/console

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

Page 19: Symfony2 - les bundles · 2017-11-21 · Creation´ Les bundles Creation d’un bundle´ Dans la console, se placer dans le repertoire Symfony´ Executer la commande´ php app/console

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

Page 20: Symfony2 - les bundles · 2017-11-21 · Creation´ Les bundles Creation d’un bundle´ Dans la console, se placer dans le repertoire Symfony´ Executer la commande´ php app/console

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

Page 21: Symfony2 - les bundles · 2017-11-21 · Creation´ Les bundles Creation d’un bundle´ Dans la console, se placer dans le repertoire Symfony´ Executer la commande´ php app/console

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

Page 22: Symfony2 - les bundles · 2017-11-21 · Creation´ Les bundles Creation d’un bundle´ Dans la console, se placer dans le repertoire Symfony´ Executer la commande´ php app/console

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

Page 23: Symfony2 - les bundles · 2017-11-21 · Creation´ Les bundles Creation d’un bundle´ Dans la console, se placer dans le repertoire Symfony´ Executer la commande´ php app/console

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

Page 24: Symfony2 - les bundles · 2017-11-21 · Creation´ Les bundles Creation d’un bundle´ Dans la console, se placer dans le repertoire Symfony´ Executer la commande´ php app/console

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

Page 25: Symfony2 - les bundles · 2017-11-21 · Creation´ Les bundles Creation d’un bundle´ Dans la console, se placer dans le repertoire Symfony´ Executer la commande´ php app/console

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

Page 26: Symfony2 - les bundles · 2017-11-21 · Creation´ Les bundles Creation d’un bundle´ Dans la console, se placer dans le repertoire Symfony´ Executer la commande´ php app/console

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

Page 27: Symfony2 - les bundles · 2017-11-21 · Creation´ Les bundles Creation d’un bundle´ Dans la console, se placer dans le repertoire Symfony´ Executer la commande´ php app/console

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