symfony3 - lis-lab.fr · 2017. 11. 23. · en effet, chaque type correspond a une classe` donc il...

24
Symfony3 Achref El Mouelhi 21 Novembre 2017, POEC PHP 2017 1 / 24

Upload: others

Post on 24-Sep-2020

1 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Symfony3 - lis-lab.fr · 2017. 11. 23. · En effet, chaque type correspond a une classe` Donc il faut importer les classes use Symfony\Component\Form\Extension\Core\Type\TextType

Symfony3

Achref El Mouelhi

21 Novembre 2017, POEC PHP 2017 1 / 24

Page 2: Symfony3 - lis-lab.fr · 2017. 11. 23. · En effet, chaque type correspond a une classe` Donc il faut importer les classes use Symfony\Component\Form\Extension\Core\Type\TextType

Plan

1 Installation et structure

2 Les bundles

3 La console

4 Les entites

5 Les formulaires

6 La securite

21 Novembre 2017, POEC PHP 2017 2 / 24

Page 3: Symfony3 - lis-lab.fr · 2017. 11. 23. · En effet, chaque type correspond a une classe` Donc il faut importer les classes use Symfony\Component\Form\Extension\Core\Type\TextType

Installation et structure

Installation Symfony3

Installation Symfony3Lancer l’invite de commandesSe placer dans le repertoire PHP (c:/wamp/www)Executer la commande composer create-projectsymfony/framework-standard-editionnom repertoire projet

Sans preciser la version, Symfony3 sera installe

21 Novembre 2017, POEC PHP 2017 3 / 24

Page 4: Symfony3 - lis-lab.fr · 2017. 11. 23. · En effet, chaque type correspond a une classe` Donc il faut importer les classes use Symfony\Component\Form\Extension\Core\Type\TextType

Installation et structure

Tester l’installation

Tester l’installationAller danslocalhost/nom repertoire projet/web/config.php puisverifier qu’il n’y a pas de message d’erreursEnfin executer php bin/console assets:install pourcorriger un bug Symfony pour la prise en charge des fichiers CSS

21 Novembre 2017, POEC PHP 2017 4 / 24

Page 5: Symfony3 - lis-lab.fr · 2017. 11. 23. · En effet, chaque type correspond a une classe` Donc il faut importer les classes use Symfony\Component\Form\Extension\Core\Type\TextType

Installation et structure

Symfony3 : structure

Symfony3 : une restructuration legere par rapport a Symfony2/app

/bin qui contient la console (c’etait dans app)Dorenavant les commandes console php bin/console ...

/src

/tests contient les fichiers de tests de notre application/var contient les logs, le cache.../vendor qui contient l’autoload (c’etait dans app)/web

composer.json

21 Novembre 2017, POEC PHP 2017 5 / 24

Page 6: Symfony3 - lis-lab.fr · 2017. 11. 23. · En effet, chaque type correspond a une classe` Donc il faut importer les classes use Symfony\Component\Form\Extension\Core\Type\TextType

Installation et structure

Fonctionnement : pareil que Symfony2

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

21 Novembre 2017, POEC PHP 2017 6 / 24

Page 7: Symfony3 - lis-lab.fr · 2017. 11. 23. · En effet, chaque type correspond a une classe` Donc il faut importer les classes use Symfony\Component\Form\Extension\Core\Type\TextType

Les bundles

Les bundles

Creation d’un bundleDans la console, se placer dans le repertoire SymfonyExecuter la commande php bin/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

21 Novembre 2017, POEC PHP 2017 7 / 24

Page 8: Symfony3 - lis-lab.fr · 2017. 11. 23. · En effet, chaque type correspond a une classe` Donc il faut importer les classes use Symfony\Component\Form\Extension\Core\Type\TextType

Les bundles

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

21 Novembre 2017, POEC PHP 2017 8 / 24

Page 9: Symfony3 - lis-lab.fr · 2017. 11. 23. · En effet, chaque type correspond a une classe` Donc il faut importer les classes use Symfony\Component\Form\Extension\Core\Type\TextType

Les bundles

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

21 Novembre 2017, POEC PHP 2017 9 / 24

Page 10: Symfony3 - lis-lab.fr · 2017. 11. 23. · En effet, chaque type correspond a une classe` Donc il faut importer les classes use Symfony\Component\Form\Extension\Core\Type\TextType

Les bundles

Les bundles

Pour testerAller sur http://localhost/Symfony/web/app dev.php/

Le Hello World doit s’afficher

21 Novembre 2017, POEC PHP 2017 10 / 24

Page 11: Symfony3 - lis-lab.fr · 2017. 11. 23. · En effet, chaque type correspond a une classe` Donc il faut importer les classes use Symfony\Component\Form\Extension\Core\Type\TextType

La console

La console

Ce qui a changeL’emplacement n’est plus dans /app mais dans /binCertaines commandes aussi :

php app/console container:debug a ete remplacee parphp bin/console debug:container

21 Novembre 2017, POEC PHP 2017 11 / 24

Page 12: Symfony3 - lis-lab.fr · 2017. 11. 23. · En effet, chaque type correspond a une classe` Donc il faut importer les classes use Symfony\Component\Form\Extension\Core\Type\TextType

Les entites

Les entites

Les entites

Rien ne change pour la creation et la manipulation

Une structuration legerement differente

Les classes repository ne sont plus dans le repertoire Entity

Elles sont plutot dans un repertoire Repository dans notrebundle

21 Novembre 2017, POEC PHP 2017 12 / 24

Page 13: Symfony3 - lis-lab.fr · 2017. 11. 23. · En effet, chaque type correspond a une classe` Donc il faut importer les classes use Symfony\Component\Form\Extension\Core\Type\TextType

Les formulaires

Les formulaires

Les changements

Restructuration des fichiers relatifs aux formulaires

Amelioration Syntaxique

Et si on executephp bin/console generate:doctrine:crudRootPersonneBundle:Personne

21 Novembre 2017, POEC PHP 2017 13 / 24

Page 14: Symfony3 - lis-lab.fr · 2017. 11. 23. · En effet, chaque type correspond a une classe` Donc il faut importer les classes use Symfony\Component\Form\Extension\Core\Type\TextType

Les formulaires

Les formulaires

Restructuration des fichiers relatifs aux formulaires

Un nouveau fichier de routage relatif a chaque entite est situedans Resources\config\routing\Entityname.yml quisera appele par le fichier de routage du bundle situe dansResources\config\routing.yml

root_personne_personne:resource: "@RootPersonneBundle/Resources/config/routing/personne.yml"prefix: /personne

21 Novembre 2017, POEC PHP 2017 14 / 24

Page 15: Symfony3 - lis-lab.fr · 2017. 11. 23. · En effet, chaque type correspond a une classe` Donc il faut importer les classes use Symfony\Component\Form\Extension\Core\Type\TextType

Les formulaires

Les formulaires

Restructuration des fichiers relatifs aux formulaires

Les vues relatives a chaque entite sont situees dansapp\Resources\views\personne et non pas dansResources\views\personne du bundle

21 Novembre 2017, POEC PHP 2017 15 / 24

Page 16: Symfony3 - lis-lab.fr · 2017. 11. 23. · En effet, chaque type correspond a une classe` Donc il faut importer les classes use Symfony\Component\Form\Extension\Core\Type\TextType

Les formulaires

Les formulaires

Difference syntaxique

personne_edit:path: /{id}/editdefaults: { _controller: "RootPersonneBundle:Personne:edit" }methods: [GET, POST]

public function editAction(Request $request,Personne $personne){

$editForm= $this->createForm(’Root\PersonneBundle\Form\PersonneType’, $personne);if ($editForm->isSubmitted() && $editForm->isValid())

{...}return ... ;

}21 Novembre 2017, POEC PHP 2017 16 / 24

Page 17: Symfony3 - lis-lab.fr · 2017. 11. 23. · En effet, chaque type correspond a une classe` Donc il faut importer les classes use Symfony\Component\Form\Extension\Core\Type\TextType

Les formulaires

Les formulaires

Difference syntaxique

On peut preciser les methodes GET, POST... dans les routes

Dans le Path de la route personne edit, on a un parametre id,mais dans la signature de la methode on recupere l’objetpersonne relatif a cet id.

On peut egalement recuperer le parametre id lui-meme dans lasignature de l’action.

21 Novembre 2017, POEC PHP 2017 17 / 24

Page 18: Symfony3 - lis-lab.fr · 2017. 11. 23. · En effet, chaque type correspond a une classe` Donc il faut importer les classes use Symfony\Component\Form\Extension\Core\Type\TextType

Les formulaires

Les formulairesConstructeur de formulaire nomClassType

namespace Root\PersonneBundle\Form;use Symfony\Component\Form\AbstractType;use Symfony\Component\Form\FormBuilderInterface;use Symfony\Component\OptionsResolver\OptionsResolver;class PersonneType extends AbstractType{

/*** {@inheritdoc}

*/public function buildForm(FormBuilderInterface$builder, array $options) {

$builder->add(’nom’,TextType::class)->add(’prenom’,TextType::class);

}...

21 Novembre 2017, POEC PHP 2017 18 / 24

Page 19: Symfony3 - lis-lab.fr · 2017. 11. 23. · En effet, chaque type correspond a une classe` Donc il faut importer les classes use Symfony\Component\Form\Extension\Core\Type\TextType

Les formulaires

Les formulaires

Difference syntaxique

La declaration de type a change nomTypeType::class

En effet, chaque type correspond a une classe

Donc il faut importer les classes useSymfony\Component\Form\Extension\Core\Type\TextTypeOn utilise ::class (une constante de classe disponible depuisPHP5.5) pour recuperer le nom de la classe

on peut faire aussiSymfony\Component\Form\Extension\Core\Type\TextType

21 Novembre 2017, POEC PHP 2017 19 / 24

Page 20: Symfony3 - lis-lab.fr · 2017. 11. 23. · En effet, chaque type correspond a une classe` Donc il faut importer les classes use Symfony\Component\Form\Extension\Core\Type\TextType

Les formulaires

Les formulaires

Constructeur de formulaire un type objet

class PersonneType extends AbstractType{/*** {@inheritdoc}

*/public function buildForm(FormBuilderInterface$builder, array $options) {

$builder->add(’nom’,TextType::class)->add(’prenom’,TextType::class);->add(’adresse’, AdresseType::class)

}...

21 Novembre 2017, POEC PHP 2017 20 / 24

Page 21: Symfony3 - lis-lab.fr · 2017. 11. 23. · En effet, chaque type correspond a une classe` Donc il faut importer les classes use Symfony\Component\Form\Extension\Core\Type\TextType

Les formulaires

Les formulaires

Constructeur de formulaire : le type Collection

class PersonneType extends AbstractType{public function buildForm(FormBuilderInterface$builder, array $options) {

$builder->add(’nom’,TextType::class)->add(’prenom’,TextType::class);->add(’sports’, CollectionType::class, array(’entry_type’ => SportType::class,’allow_add’ => true,’allow_delete’ => true

));}...

21 Novembre 2017, POEC PHP 2017 21 / 24

Page 22: Symfony3 - lis-lab.fr · 2017. 11. 23. · En effet, chaque type correspond a une classe` Donc il faut importer les classes use Symfony\Component\Form\Extension\Core\Type\TextType

Les formulaires

Les formulairesConstructeur de formulaire : le type Entity

class PersonneType extends AbstractType{public function buildForm(FormBuilderInterface$builder, array $options) {

$builder->add(’nom’,TextType::class)->add(’prenom’,TextType::class);->add(’sports’, EntityType::class,array(’class’ => ’RootPersonneBundle:Sport’,’choice_label’ => ’name’,’multiple’ => true))

}

N’oublions pas

use Symfony\Bridge\Doctrine\Form\Type\EntityType ;

21 Novembre 2017, POEC PHP 2017 22 / 24

Page 23: Symfony3 - lis-lab.fr · 2017. 11. 23. · En effet, chaque type correspond a une classe` Donc il faut importer les classes use Symfony\Component\Form\Extension\Core\Type\TextType

Les formulaires

Les formulaires

Constructeur de formulaire : l’heritage

class OnlyPersonneType extends AbstractType{/*** {@inheritdoc}

*/public function buildForm(FormBuilderInterface$builder, array $options){

public function getParent(){

return PersonneType::class;}...

21 Novembre 2017, POEC PHP 2017 23 / 24

Page 24: Symfony3 - lis-lab.fr · 2017. 11. 23. · En effet, chaque type correspond a une classe` Donc il faut importer les classes use Symfony\Component\Form\Extension\Core\Type\TextType

La securite

La securite

AttentionLe service security.context a ete remplace parsecurity.authorization checker

21 Novembre 2017, POEC PHP 2017 24 / 24