Development

Documentation/fr_FR/book/1.0/trunk/14-Generators

You must first sign up to be able to contribute.

Cette partie de la documentation est en cours de traduction. Cela signifie qu'elle est traduite de manière soit incomplète, soit inexacte. En attendant que cette traduction soit terminée, vous pouvez consulter la version en anglais pour des informations plus fiables.

Chapitre 14 - Les générateurs

De nombres applications utilisent des informations stockées dans des bases de données et permettent d'y accéder à travers une interface. Symfony offre la possibilité de créer automatiquement un module dont la fonction est de manipuler les données basées sur un objet Propel

Ce chapitre traite des deux générateurs fournis avec symfony : scaffolding et le générateur de module d'administration. Ce dernier repose sur un fichier de configuration spécial avec une syntaxe à part entière. Par conséquent, la plus grande partie de ce chapitre sera consacré aux multiples capacités du générateur de module d'administration.

Génération de Code basé sur le Modèle

Dans une application web, les différentes opérations d'accès aux données peuvent être définies de la façon suivante :

  • Création d'un enregistrement
  • Récupération d'un enregistrement
  • Modification d'un enregistrement (et de ses colonnes)
  • Suppression d'un enregistrement

Ces opérations sont si communes que l'on a coutume de les désigner par l'abréviation : CRUD. De nombreuses pages internet peuvent être résumé à une de ces opérations. Par exemple, dans un forum, la liste des derniers messages postés est une opération de récupération et la réponse à un message posté consiste en une opération de création.

Les actions basiques et les gabarits qui correspondent aux opérations CRUD pour une table donné sont régulièrement crées dans les applications web. Dans symfony, la couche modèle contient assez d'information pour pouvoir générer le code des opérations CRUD. Il est ainsi possible de d'accélérer le développement de la partie initiale d'une application ou d'un module d'administration.

Toutes les tâches de génération de code basées sur le modèle créent un module à part-entière et sont générées avec un seul appel à l'interface de ligne de commande par le type de commande suivant :

> symfony <TASK_NAME> <APP_NAME> <MODULE_NAME> <CLASS_NAME>

Les différentes commandes pour la génération de code sont propel-init-crud, propel-generate-crud, et propel-init-admin.

Scaffolding et Administration

Pendant le développement d'une application, la génération de code peut être utilisée pour deux raisons différentes :

  • Un "scaffolding" est la structure de base (actions et gabarit) requis pout effectuer les différentes opérations CRUD sur une table. Le code est minimal car il est généré afin de servir de guide pour le développemnt à venir. C'est une base de départ qui doit être adaptée à votre logique et à votre présentation. Les "scaffolding" sont la plupart du temps utilisés pendant la phase développement, que ce soit pour créer une page d'accès à une base de données, pour construire un prototype ou pour démarrer un module basé sur une table.
  • Un module d'administration est une interface complexe pour manipuler des données, dédiée pour la gestion de site. Le module d'administration, contrairement au "scaffolding", n'est pas crée pour que l'on modifie son code. Il peut être customisé, étendu ou assemblé par un fichier de configuration ou l'héritage. La présentation est importante, c'est pourquoi il est possible d'utiliser des fonctionnalités comme le tri, la pagination et les filtres. Un module d'administration peut être considéré comme la dernière partie du développement logiciel ; il est crée et mis à la disposition du client.

La ligne de commande symfony utilise le terme crud pour désigner un "scaffolding" et le mot admin pour un module d'administration.

Code Initié ou Généré

Symfony offre deux moyens de générer du code : soit par héritage (init) ou soit par génération de code (generate).

Vous pouvez initier un module, c'est à dire créer des classes vides qui héritent du framework. Ce procédé masque le code PHP des actions et des gabarits pour éviter qu'il ne soit modifié. C'est utile si vous n'avez pas terminé votre structure de données, ou si vous avez juste besoin d'une interface rapide pour manipuler les enregistrements d'une base de données. Le code exécuté n'est pas situé dans votre application mais dans le cache. La tâche en ligne de commande pour ce type de génération commence par propel-init-.

Le code d'une action initiée est vide. Par exemple, un module "article" initié possédera des actions du type :

[php]

class articleActions extends autoarticleActions
{
}

Vous pouvez également générer le code d'action et de gabarit qui puisse être modifié. Les modules générés de la sorte sont par conséquent indépendants des classes du framework et ils ne peuvent pas être modifiés par des fichiers de configuration. La tâche en ligne de commande pour ce type de génération commence par propel-generate-

Il est souvent mieux de générer un "scaffolding" car ceux-ci sont construits dans l'optique d'être utilisés pour des développements ultérieurs. En revanche, un module d'administration devrait être facilement adaptable par une modification du fichier de configuration et il devrait également rester opérationnel même si le modèle de données change. C'est pourquoi les modules d'administration doivent être uniquement initiés.

Exemple : Le Modèle de Données

Tout au long de ce chapitre, pour démontrer les capacités des générateurs de symfony, tous les listing seront basés sur un exemple simple qui vous rappelera celui du chapitre 8. C'est bien sûr notre fameux blog, contenant les deux classes Article et Comment. Le listing 14-1 rappelle le schéma, lui-même illustré par l'image 14-1.

Listing 14-1 - schema.yml de l'exemple du blog

propel:
  blog_article:
    _attributes: { phpName: Article }
    id:
    title:       varchar(255)
    content:     longvarchar
    created_at:
  blog_comment:
    _attributes: { phpName: Comment }
    id:
    article_id:
    author:      varchar(255)
    content:     longvarchar
    created_at:

Image 14-1 - Exemple du modèle de données

Il n'y a pas de règles particulières à suivre pour créer un fichier schéma qui permettra la génération de code. Symfony interprétera les attributs du fichier pour générer un "scaffolding ou un module d'administration.

NOTE Dans ce chapitre, pour bien comprendre ce que symfony génère et ce qui peut être fait avec ce code généré vous devrez suivre pas à pas les listing de l'exemple. Vous êtes >donc invité à suivre la structure de données décrite précédemment en créant une base de données contenant les deux tables blog_article et blog_comment qu'il faudra remplir >avec un jeu de données.

Attachments