Development

Documentation/fr_FR/book/1.0/trunk/04-The-Basics-of-Page-Creation

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 4 – Les bases de la création de pages

Curieusement, le premier tutorial que suivent les programmeurs lorsqu'ils apprennent un nouveau language ou un framework est celui qui affiche "hello world" à l'écran. Il est étrange de penser qu'un ordinateur peut saluer le monde entier, tout en sachant que les essais dans le domaine de l'intelligence artificielle ont souvent donné de faibles capacités en conversation. Mais symfony n'est pas plus bête qu'un autre programme, la preuve en est, vous pouvez créer une page qui affiche "Hello, <votre nom ici>". Ce chapitre vous apprendra à créer un module, c'est un élément structurel qui regroupe un ensemble de pages. Vous apprendrez également à créer une page, qui est divisée en une action et un gabarit, dû au modèle MVC. Les liens et les formulaires sont les bases de l'interaction sur le web, vous apprendrez comment les insérer dans un gabarit et les manipuler dans une action.

La création d'un squelette de module

Comme décrit dans le chapitre 2, symfony regroupe les pages dans un module. Avant de créer une page, vous devez créer un module, qui est initialement une interface vide avec une structure de fichiers que symfony reconnait. La ligne de commande symfony crée automatiquement un module. Vous devez appeler la tâche init-module de la commande avec comme argument le nom de l'application suivi du nom du module. Dans le chapitre précédent vous avez créé une application myapp. Pour ajouter un module mymodule dans cette application, tapez la commande :

> cd ~/myproject
> symfony init-module myapp mymodule

>> dir+      ~/myproject/apps/myapp/modules/mymodule
>> dir+      ~/myproject/apps/myapp/modules/mymodule/actions
>> file+     ~/myproject/apps/myapp/modules/mymodule/actions/actions.class.php
>> dir+      ~/myproject/apps/myapp/modules/mymodule/config
>> dir+      ~/myproject/apps/myapp/modules/mymodule/lib
>> dir+      ~/myproject/apps/myapp/modules/mymodule/templates
>> file+     ~/myproject/apps/myapp/modules/mymodule/templates/indexSuccess.php
>> dir+      ~/myproject/apps/myapp/modules/mymodule/validate
>> file+     ~/myproject/test/functional/myapp/mymoduleActionsTest.php
>> tokens    ~/myproject/test/functional/myapp/mymoduleActionsTest.php
>> tokens    ~/myproject/apps/myapp/modules/mymodule/actions/actions.class.php
>> tokens    ~/myproject/apps/myapp/modules/mymodule/templates/indexSuccess.php

A part les dossiers actions/, config/, lib/, templates/, et validate/, cette commande crée seulement 3 fichiers. Le premier dans le dossier test/ pour les unités de tests. Vous n'avez pas besoin de connaitre son utilité avant le chapitre 15. Le second fichier, actions.class.php ( liste 4-1 ), renvoit vers la page de félicitation du module par défaut. Le troisième fichier, templates/indexSuccess.php, est vide.

Liste 4-1 L'action générée par défaut, dans actions/actions.class.php

[php]
<?php

class mymoduleActions extends sfActions
{
  public function executeIndex()
  {
    $this->forward('default', 'module');
  }
}

NOTE Si vous regardez le fichier actions.class.php actuel, vous trouverez plus que ces quelques lignes, il contient beaucoup de commentaires. Symfony recommande l'utilisation des commentaires PHP pour documenter votre projet, et rend compatible chaque fichier de classes avec l'outils phpDocumentor (http://www.phpdoc.org/).

Pour chaque nouveau module, symfony crée une action index par défaut. Elle est composée d'une méthode appelée executeIndex et d'un fichier gabarit appelé indexSuccess.php. L'explication du préfixe execute et du suffixe Success est donnée respectivement au chapitre 6 et 7. Pour le moment, vous pouvez considérer que c'est une convention de nommage. Vous pouvez voir la page correspondante ( reproduite à la Représentation 4-1 ) à l'url suivante :

http://localhost/myapp_dev.php/mymodule/index

L'action index par défaut n'est pas utilisée dans ce chapitre, vous pouvez supprimer la méthode executeIndex() du fichier actions.class.php, ainsi que le fichier indexSuccess.php du répertoire templates.

NOTE Symfony propose d'autres manières pour créer un module qu'en utilisant la ligne de commande. L'une d'entre elles, consiste à créer les dossiers et fichiers vous même. Dans beaucoup de cas, les modules sont créés pour manipuler des données d'une table précise. Comme le code pour créer, récupérer, mettre à jour ou effacer des enregistrements d'une table est souvent le même, symfony fournit un mécanisme appelé échaffaudage pour générer automatiquement pour vous ce code. Le chapitre 14 explique cette technique.

Représentation 4-1 - La page index par défaut générée automatiquement

La page index par défaut générée automatiquement

Créer une page

Dans symfony, la logique entre chaque page est stockée dans l'action et la présentation dans le gabarit. Les pages sans logique requièrent ( pour le moment ) une action vide.

Créer une Action

La page "Hello, world !" est accessible par une action myAction. Pour la créer, ajouter une méthode executeMyAction à la classe mymoduleActions, comme à la liste 4-2.

Liste 4-2 Ajouter une action, c'est ajouter une méthode execute dans la classe action

[php]
<?php

class mymoduleActions extends sfActions
{
  public function executeMyAction()
  {
  }
}

Le nom d'une méthode d'une action est toujours executeXxx(). La seconde partie du nom est le nom de l'action avec la première lettre en majuscule. Maintenant, appelez l'adresse suivante :

http://localhost/myapp_dev.php/mymodule/myAction

Symfony vous indique que le gabarit myActionSuccess.php n'est pas présent. C'est normal, dans symfony une page est toujours composée d'une action et d'un gabarit.

Attention Les URLs ( pas les noms de domaines ) sont sensibles à la casse comme l'est symfony ( même si les noms des méthodes PHP ne sont pas sensibles à la casse ). Si vous ajoutez une méthode executemyaction() ou executeMyaction, et que vous appelez dans le navigateur myAction, symfony vous retournera une erreur 404.

SIDEBAR Les urls sont une partie de la réponse

Symfony propose un système de routage qui vous permet une séparation complète entre le nom de l'action et l'écriture de l'url qui l'appelle. Cela permet d'adapter le format de l'URL comme si elle était une partie de la réponse. Vous n'êtes pas limité par la structure des fichiers et/ou par les paramètres de la requête. L'URL d'une action peut prendre la forme que vous voulez. Par exemple, l'appel de l'action index d'un module nommé article peut être comme ceci :

http://localhost/myapp_dev.php/article/index?id=123

Cette URL retourne un article précis de la base de données. Dans cette exemple, elle retourne un article ( avec id=123 ) de la section Europe qui traite des finances en France. Vous pouvez écrire l'url d'une façon complètement différente avec un changement simple dans le fichier de configuration routing.yml :

http://localhost/articles/europe/france/finance.html

Non seulement l'URL est d'une forme moteur de recherche friendly, mais en plus elle est compréhensible pour l'utilisateur. Celui-ci peut utiliser la barre d'adresse comme une pseudo ligne de commande pour faire ces propres requêtes, par exemple :

http://localhost/articles/tagged/finance+france+euro

Symfony sait comment analyser et générer des urls malines pour les utilisateurs. Le système de routage tri automatiquement les paramètres d'une requête contenu dans une url maline et les rend accessible dans une action. Le système formate également les liens inclus dans la réponse, c'est pour cela qu'ils sont "malins". Vous en apprendrez plus au Chapitre 9.

En général, cela signifie que le choix des noms des actions de vos applications ne doit pas être influencé par l'apparence de l'url utilisée pour les appeler mais par la fonction de l'action dans l'application. Le nom d'une action exprime ce que l'action fait et est souvent un verbe à l'infinitif ( ex: lister, éditer, etc... ). Le nom des actions peut-être totalement invisible aux utilisateurs, alors n'hésitez pas à utiliser des noms explicites ( ex : ListerParNom ou AfficherAvecCommentaires). Vous vous économiserez l'ajout de commentaires dans le code pour expliquer la fonction d'une action, et en plus le code sera plus facile à lire.

Créer un gabarit