14 Jan, 2020

Création d’un formulaire sous CakePHP 3 et Symfony 3

Développement d'un système de création de formulaire sous CakePHP 3 et Symfony 3

Lors du développement d’un site web, l’utilisation d’un framework est aujourd’hui essentiel. Un framework étant un environnement de travail, c’est à dire un ensemble de dossiers et fichiers qui vont régir notre projet et nous permettre de travailler dans une logique fixée, un ensemble de règles et algorithmes prédéfinis. Cela va nous permettre d’organiser efficacement notre projet et profiter des ressources qu’il nous procure.

Nous verrons dans cet article le processus de création d’un formulaire simple sous les frameworks PHP Symfony et CakePHP étape par étape. Il conviendra de mettre en évidence les différences entre ces deux technologies.

– Prérequis

● Symfony

  • Version : 3.4
  • Commande d’installation du projet : composer create-project symfony/framework-standard-edition symfony-form « 3.4 »

● CakePHP

  • Version : 3.7
  • Commande d’installation du projet : composer self-update && composer create-project –prefer-dist cakephp/app cakephp-form

Nous utiliserons la console de commandes à la racine du projet pour ces deux technologies.

– Mise en place de la base de données

Symfony

Lors de la création du projet on détermine les accès et le nom de la base de données. Ainsi pour la créer il suffit d’utiliser la commande :

php bin/console doctrine:database:create

Elle prendra automatiquement le nom attribué. Il est également possible de créer la base de données manuellement mais pour cet article nous privilégions les lignes de commandes.

CakePHP

Il est nécessaire de créer manuellement la base de données et de configurer les accès dans le fichier config/app.php :

– Création de l’entité

Symfony

On génère l’entité à l’aide de la commande :

php bin/console doctrine:generate:entity

On nomme l’entité Article et on la place dans le bundle AppBundle comme ceci :

AppBundle:Article

On lui attribue les champs suivants :

  • title de type string, de longueur 255, non null et non unique.
  • author de type string, de longueur 255, non null et non unique.
  • content de type text, non null et non unique.
  • created_at de type datetime, non null et non unique.
  • modified_at de type datetime, non null et non unique.

Ces commandes permettent ainsi de créer la table Article dans la base de données et de générer entre autres le fichier Article.php dans le dossier src/AppBundle/Entity qui permet de paramétrer l’entité.

Nous pouvons désormais créer la table article dans la base de données en utilisant la commande suivante :

php bin/console doctrine:schema:update –force

Afin de visualiser la ou les requêtes sql qui seront exécutées vous pouvez utiliser la commande :

php bin/console doctrine:schema:update –dump-sql

Nous allons ensuite nous assurer que les champs created_at et modified_at se mettent à jour automatiquement. Pour cela on ajoute ces fonctions dans le fichier src/AppBundle/Entity/Article.php  :

On ajoute également cette notation à notre classe :

CakePHP

Nous allons reprendre l’exemple de la table Article que nous ajouterons manuellement en base de données avec les mêmes champs et leurs paramètres et que nous nommerons articles.

  • id (clé primaire) de type int, de longueur 11, non null
  • title de type string, de longueur 255, non null
  • author de type string, de longueur 255, non null
  • content de type text, non null
  • created de type datetime, non null
  • modified de type datetime, non null

 

À noter que les champs des dates ne sont pas identiques. En effet nous respectons ici les conventions de CakePHP sur les noms des champs de date. Nous verrons à quoi cela servira.

 

À l’aide de la commande suivante, nous allons générer les fichiers Article.php dans le dossier src/Model/Entity et ArticlesTable.php dans le dossier src/Model/Table.

bin/cake bake model articles

Ces fichiers vont nous permettre de configurer l’entité. Nous pouvons remarquer dans le fichier ArticlesTable.php la présence de la ligne de code :

 Cela va permettre de mettre à jour automatiquement les champs created et modified.

– Création du controller

Symfony

Nous pouvons générer le controller à l’aide de la commande :

php bin/console generate:controller

Puis le nom de notre entité se situant dans le répertoire AppBundle :

AppBundle:Article

Enfin nous créons l’action d’ajout :

addAction

avec l’url : /articles/add

 

Il vous sera demandé :

Ce à quoi vous pouvez répondre yes et ainsi générer le fichier de vue pour cette action. 

On obtient ainsi le controller ArticleController.php qui nous permettra de manipuler nos articles. On développe ensuite le processus d’ajout d’un article.

Symfony

De même nous utilisons une commande afin de générer notre controller :

bin/cake bake controller articles

Cette dernière va créer le fichier ArticlesController.php dans le dossier src/Controller. Sont générées automatiquement les méthodes index, view, add, edit et delete. Celle qui nous intéressera sera l’action d’ajout :

– Création de la vue et du formulaire

Symfony

Nous allons dans un premier temps générer le formulaire nous permettant de créer des articles à l’aide de la commande :

php bin/console doctrine:generate:form AppBundle:Article

Cette action va créer le fichier ArticleType.php dans le dossier src/AppBundle/Form. Il va nous permettre de configurer le formulaire d’ajout d’articles. Il s’agit de la fonction buildForm

On y remplace :

par

afin d’obtenir un meilleur formulaire avec un label pour chaque champ que nous souhaitons. On ajoute également les librairies suivantes :

Nous avons précédemment généré la vue lors de la création du controller et de l’action d’ajout dans src/AppBundle/Resources/views/Article/add.html.twig. On peut ainsi y implémenter le code suivant pour intégrer le formulaire :

La variable Form provient de la méthode addAction que nous avons créé précédemment.

Vous pouvez désormais créer un article.

Url : /articles/add

CakePHP

On crée la vue add.ctp dans le dossier src/Template/Articles et on y intègre directement notre formulaire :

Il est également possible d’utiliser la commande :

bin/cake bake template articles

Afin de générer les pages de vue index, view, add et edit et leurs formulaires associés. C’est cette méthode que nous utiliserons.

Il vous est ainsi possible de créer des articles.

Url : /articles/add

– Conclusion

Lignes de commandes

L’utilisation des lignes de commandes est assez équivalente pour les deux frameworks.

Nous pouvons noter comme vu dans cet article la possibilité de créer une entité et ses champs directement en lignes de commandes sur Symfony.

Sur CakePHP nous avons vu qu’il est possible de générer l’ensemble des fichiers de vue et des algorithmes dans le controller afin développer un CRUD. Qu’est ce qu’un CRUD ?

Entity Manager

Il est nécessaire sur Symfony de faire appel manuellement à l’ORM Doctrine, c’est à dire l’outil qui va nous permettre de manipuler nos entités. On persiste notre entité puis on flush. Sur CakePHP nous pouvons directement manipuler nos entités en utilisant $this->{nom_entite}->{fonction}.

Création de formulaire

Sur Symfony on paramètre les formulaires dans le dossier Form. On y fait appel dans le controller d’où on l’envoie vers la vue. Sur CakePHP il n’y a pas d’emplacement destiné mais nous pouvons utiliser un helper qui permet de plus facilement utiliser des formulaires dans nos vues.

Routage

CakePHP nous permet de ne pas avoir à configurer les routes si on respectent ses conventions. En effet pour une méthode appelée add si sa vue se nomme également add alors l’association du routage s’effectue automatiquement. On peut également personnaliser les routes dans le fichier de config routes.php.

Sur Symfony la configuration des routes peut se faire ou bien dans le fichier de config routing.yml ou bien directement dans le controller en annotations par exemple.

Mon avis

CakePHP a une notoriété bien plus faible que Symfony, cependant je trouve ce dernier plus agréable à manipuler tant sa prise en main est accessible et moins complexe que Symfony. De même ses spécificités nous permettent de grandement réduire notre temps de travail notamment si on suit ses conventions ce qui permet également de maintenir une certaine rigueur tout au long du développement d’un projet.

#Back-End #CakePHP #Développement #Symfony