Symfony2 : Les commandes importantes

Elliott Chiaradia | 19-01-2016

Symfony2 dispose d’innombrables commandes. Bien qu’elles ne soient, à mon humble avis, pas toutes utiles, s'en passer nous ferait perdre un temps considérable et nous obligerait à devoir répéter du travail pas franchement intéressant.

Dans cet article, je vais vous présenter quelques commandes Symfony2. Celles que j'utilise fréquemment et que je trouve important de connaître. Grâce à elles, vous allez par exemple pouvoir créer une base de données, générer automatiquement des getters et des setters, lister les routes de votre projet ou encore supprimer le fameux cache de Symfony2 qui nous embête tant, nous développeurs, et cela en très peu de temps ! Oui, vous verrez, elles sont très utiles, ne vous en privez pas !

logo_symfony2

L'article est séparé en deux chapitres. Le premier contient les commandes générales, tandis que le second présente les commandes spécifiques à Doctrine.  Bonne lecture :)

 

Commandes générales

Afficher la liste des commandes Symfony2

Liste les commandes disponibles, y compris les commandes héritées des bundles supplémentaires que vous avez installés.

php app/console list

 

Créer un nouveau bundle

Puisque dans Symfony2 tout est bundle, cette commande est essentielle.

php app/console generate:bundle

 

Après avoir effectué cette commande, le bundle namespace vous sera demandé. Celui-ci doit suivre la convention suivante : Deux lettres qui définissent le nom de l’entreprise (ou vos initiales), le caractère « / », le nom de votre bundle, la chaine de caractère « Bundle ».

Allons-y avec un exemple, ça sera sans doute plus clair !

Voici mon bundle namespace : AA/NomBundle

Pour :

  • AA = initiales
  • Nom = nom du bundle
  • Bundle = suffixe obligatoire pour indiquer à Symfony qu'il s'agit bel et bien d'un bundle.

Pour le "bundle name", il est conseillé d'utiliser le même nom que celui du "bundle namespace" mais sans le "/". Dans notre exemple, nous aurions le "bundle name" suivant : "AANomBundle".

 

Supprimer le cache

Pour supprimer le cache de la production :

php app/console cache:clear -e prod

 

Et pour le mode développement :

php app/console cache:clear -e dev

 

Par défaut, si vous ne spécifier pas le "-e dev" ou "-e prod", c'est le cache du mode développement qui sera supprimé.

Pour supprimer le cache sans ligne de commande, vous devez supprimer les répertoires et fichiers présents dans le dossier app/cache. Plus fastidieux qu'une petite commande non ?

 

Afficher les routes de votre application

Cette commande peut être très utile si vous avez plusieurs fichiers de routing et que vous avez un doute sur une url. Les routes sont classées par nom.

php app/console debug:router

 

Doctrine

Les commandes dédiées à Doctrine sont d’après moi les plus intéressantes et c'est sans doute celles que j'utilise le plus. Vous verrez, on peut faire beaucoup de choses avec !

 

Lister la liste des commandes doctrine :

Vous ne vous souvenez plus de la syntaxe d’une commande doctrine ? Pas de problème, vous allez sans doute la retrouver grâce à cette commande :

php app/console list doctrine

 

Créer une base de données

Dans une configuration standard, le fichier config.yml va rechercher les informations spécifiques à la base de données dans votre fichier app/config/parameters.yml. C'est dans celui-ci que vous devez définir la configuration de votre base de données.

Exemple du fichier parameters.yml :

parameters:
    database_host: 127.0.0.1
    database_port: null
    database_name: nomdelabase
    database_user: root
    database_password: null
    mailer_transport: smtp
    mailer_host: 127.0.0.1
    mailer_user: null
    mailer_password: null
    secret: ThisTokenIsNotSoSecretChangeIt

 

À l’exécution de la commande suivante, la base de données sera créée avec la configuration paramétrée dans parameters.yml.

php app/console doctrine:database:create
 

Supprimer une base de données

Le --force est obligatoire, sans quoi vous aurez un message de mise en garde. Ben ouais, on ne rigole pas avec une commande aussi destructrice !

php bin/console doctrine:database:drop --force

 

Mettre à jour la structure de votre base de données

Cette commande compare l’état actuel de vos entités et l’état de votre base de données, afin que cette dernière soit à jour. Elle est donc très utile mais elle peut aussi être dangereuse !

php app/console doctrine:schema:update --force

 

C’est pourquoi je ne peux que vous conseiller d’exécuter la commande suivante avant de mettre à jour toute la structure de votre database. Elle affiche les modifications qui vont être effectuées dans votre base de données (sous la forme de code SQL), il ne vous reste plus qu’à contrôler, et si ça vous semble correct, lancez un –force !

php app/console doctrine:schema:update --dump-sql
 

Générer une entité

Pour créer une nouvelle entité, vous devez exécuter cette commande :

php app/console generate:doctrine:entity

 

On va vous demander le nom de votre entité, il va falloir le rentrer avec le format suivant : MonBundle:MonEntite.

Exemple : Si vous avez un dossier « AA » (initial de votre nom ou entreprise) contenant un bundle « SuperBundle » et que vous voulez créer une entité « Tag », vous devriez entrer : AASuperBundle:Tag.

C’est maintenant l’heure de choisir le format de votre entité. De base, si vous appuyez sur "enter", vous choisirez le format « annotation », personnellement c’est celui que je conseille, mais si vous voulez absolument avoir un fichier en YML, libre à vous !

Cette commande vous offre aussi la possibilité de créer vos champs directement dans votre invite de commande, ce qui a l’avantage de créer automatiquement vos setter et getter. Pour ce faire, il suffit écrire le nom de votre futur champ, puis de choisir le type de données que va contenir le champ (string, int, etc.). La documentation de Doctrine contient la liste des types possibles.

Quand vous avez fini de créer vos champs, appuyez sur "enter". Et ne vous en faites pas, vous pourrez créer des champs supplémentaires par la suite, il vous suffit de modifier l'entité et de mettre à jour la structure de la base de données, comme expliqué précédemment. De plus, vous pourrez aussi créer les différents setters et getters de ces champs automatiquement, grâce à la commande présentée au point suivant.

 

Générer les setters et les getters pour une entité

La création des getters et des setters basiques est un véritable travail de singe ! Autant l'éviter et utiliser cette commande :

php app/console doctrine:generate:entities NomduBundle/Entity/NomEntite

 

Exemple :

  • AA = initiales
  • NomBundle = nom du bundle
  • Tag = nom de l’entité

Nous devrions taper la commande suivante :

php app/console doctrine:generate:entities AA/NomBundle/Entity/Tag

 

Cette commande va générer les setters et les getters pour les fields de votre entité qui n’en ont pas encore. A noter que les getters et les setters peuvent être créés automatiquement à la création de l’entité, grâce à la commande vue précédemment, permettant de générer une entité.

php app/console generate:doctrine:entity

 

Conclusion

J’utilise principalement ces commandes-là. Cependant, en plus de celles-ci, j’ai souvent recours à des commandes propres à des bundles spécifiques. Par exemple, le Bundle FOSUserBundle permettant d’implémenter un système d’utilisateurs offre différentes commandes, comme fos :user :create qui, comme sa syntaxe l’indique, créer un nouveau user. C’est pourquoi, après avoir installé un bundle, je ne peux que vous conseiller d’aller lire sa documentation pour voir s’il y a des commandes pouvant vous être utiles. Si la documentation du bundle n'est pas bien faite, vous pouvez aussi tout simplement exécuter la commande php app/console list , qui va lister la totalité des commandes disponibles pour votre application, y compris celles rajoutées par des bundles supplémentaires.