symfony3 - lis-lab.fr · 2017. 11. 23. · en effet, chaque type correspond a une classe` donc il...
TRANSCRIPT
Symfony3
Achref El Mouelhi
21 Novembre 2017, POEC PHP 2017 1 / 24
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
La securite
La securite
AttentionLe service security.context a ete remplace parsecurity.authorization checker
21 Novembre 2017, POEC PHP 2017 24 / 24