Development

Documentation/fr_FR/my_first_project/trunk (diff)

You must first sign up to be able to contribute.

Changes between Version 10 and Version 11 of Documentation/fr_FR/my_first_project/trunk

Show
Ignore:
Author:
Geoff (IP: 88.191.40.240)
Timestamp:
07/23/07 18:45:40 (10 years ago)
Comment:

Relecture finale

Legend:

Unmodified
Added
Removed
Modified
  • Documentation/fr_FR/my_first_project/trunk

    v10 v11  
    2020## Installer Symfony et initialiser le projet 
    2121 
    22 Pour faire vite, nous allons utiliser le bac à sable de Symfony (sandbox). Il s'agit d'un projet Symfony vierge dans lequel toutes les bibliothèques sont déjà inclues et toutes les configurations standards déjà réalisées. Le grand avantage du bac à sable par rapport à d'autres types d'installations est que vous pouvez immédiatement commencer à expérimenter. 
    23  
    24 Téléchargez le ici : [sf_sandbox.tgz] (http://www.symfony-project.com/get/sf_sandbox.tgz), décompressez le à la racine de votre répertoire web. Voir le `readme` inclus pour plus d'informations. L'arborescence des fichiers devrait ressembler à : 
    25  
    26  
     22Pour faire vite, nous allons utiliser le bac à sable de Symfony (sandbox) (Vous pouvez aussi télécharger le [code source final] (http://www.symfony-project.com/downloads/my_first_project.tgz)). Il s'agit d'un projet Symfony vierge dans lequel toutes les bibliothèques sont déjà inclues et toutes les configurations standards déjà réalisées. Le grand avantage du bac à sable par rapport à d'autres types d'installations est que vous pouvez immédiatement commencer à expérimenter. 
     23 
     24Téléchargez le ici : [sf_sandbox.tgz] (http://www.symfony-project.com/get/sf_sandbox.tgz), décompressez-le à la racine de votre répertoire web. Voir le `readme` inclus pour plus d'informations. L'arborescence des fichiers devrait ressembler à : 
    2725 
    2826    www/ 
    4846 
    4947 
    50 Le projet sf_sandbox contient donc une application frontend. Testez le bac à sable en saisissant l'URL suivante :  
     48Le **projet** `sf_sandbox` contient donc une **application** `frontend`. Testez le bac à sable en saisissant l'URL suivante :  
    5149 
    5250* * * * 
    6765## Initialiser le modèle de données 
    6866 
    69 Le blog contiendra des articles qu'il sera possible de commenter. Editez le fichier `sf_sandbox/config/schema.xml` et coolez-y la configuration suivante : 
    70  
     67Le blog contiendra des articles qu'il sera possible de commenter. Créez et éditez le fichier `sf_sandbox/config/schema.xml` et collez-y la configuration suivante : 
    7168  
    7269    propel: 
    8885 
    8986 
    90 Ce fichier de configuration utilise la syntaxe YAML. Il s'agit d'un langage très simple permettant l'emploie arborescence style XML décritent par indentation. De plus c'est plus facile à lire et a écrire qu'XML. Il faut cependant retenir que l'indentation à un sens et que les tabulations sont strictement interdites. Pensez à n'utiliser que les espaces. Pour plus d'informations que YAML, lisez le [chapitre concernant la configuration] (http://www.symfony-project.com/book/trunk/05-Configuring-Symfony). 
    91  
    92 Ce code décrit deux tables Post et Comment. Sauvegardez-le et, en ligne de commande sous le répertoire `sf_sandbox/`, saisissez : 
     87Ce fichier de configuration utilise la syntaxe YAML. Il s'agit d'un langage très simple permettant l'emploie d'arborescences style XML décrites par indentation. De plus, c'est plus simple à lire et a écrire que XML. Il faut cependant retenir que l'indentation à un sens et que les tabulations sont strictement interdites. Pensez à n'utiliser que les espaces. Pour plus d'informations que YAML, lisez le [chapitre concernant la configuration] (http://www.symfony-project.com/book/trunk/05-Configuring-Symfony). 
     88 
     89Ce code décrit deux tables `Post` et `Comment`. Sauvegardez-le et, en ligne de commande sous le répertoire `sf_sandbox/`, saisissez : 
    9390 
    9491> $ symfony propel-build-model 
    9794> Assurez-vous d'être à la racine du projet (sf_sandbox/) avant de lancer la commande `symfony` 
    9895 
    99 Certaines classes sont crées dans le répertoire `sf_sandbox/lib/model/`. Ce sont les classes du mappage objet-relationnel (ORM) qui nous permet d'avoir accès à une base de données relationnelle à partir d'un code orienté objet sans avoir à écrire une seule requête SQL. Symfony utilise la bibliothèque Propel pour cela. Nous appellerons ces objets : le modèle (Vous en apprendrez plus sur ce point au [chapitre 8 - Inside the Model Layer] (http://www.symfony-project.com/book/trunk/08-Inside-the-Model-Layerfind)). 
     96Certaines classes sont crées dans le répertoire `sf_sandbox/lib/model/`. Ce sont les classes du mappage objet-relationnel (ORM) qui nous permet d'avoir accès à une base de données relationnelle à partir d'un code orienté objet sans avoir à écrire une seule requête SQL. Symfony utilise la bibliothèque Propel pour cela. Nous appellerons ces objets : **le modèle** (Vous en apprendrez plus sur ce point au [chapitre 8 - Inside the Model Layer] (http://www.symfony-project.com/book/trunk/08-Inside-the-Model-Layerfind)). 
    10097 
    10198Sur une de commande saisissez : 
    10299 
    103  
    104100> $ symfony propel-build-sql 
    105101 
    106  
    107 Un fichier `lib.model.schema.sql` est créé dans `sf_sandbox/data/sql/`. Cette requête SQL peut être utilisée pour initialiser une base de données avec une structure identique. Vous pourriez créer une base de données dans MySQL avec la ligne de commande ou une interface web (tel que décrit dans le [chapitre modèle] (http://www.symfony-project.com/book/trunk/08-Inside-the-Model-Layerfind)). Heureusement, le bac à sable de Symfony est configuré pour fonctionner de façon autonome avec un simple fichier SQLite, vous n'avez donc pas à initialiser une base de données. Par défaut, le projet `sf_sandbox` utilisera une base de données nommée `sandbox.db` située dans `sf_sandbox/data/`. Pour créer la structure de table à partir du fichier SQL, saisissez : 
     102Un fichier `lib.model.schema.sql` est créé dans `sf_sandbox/data/sql/`. Cette requête SQL peut être utilisée pour initialiser une base de données avec une structure identique. Vous pourriez créer une base de données dans MySQL avec la ligne de commande ou une interface web (tel que décrit dans le [chapitre modèle] (http://www.symfony-project.com/book/trunk/08-Inside-the-Model-Layerfind)). Heureusement, le bac à sable de Symfony est configuré pour fonctionner de façon autonome avec un simple fichier SQLite. Vous n'avez donc pas à initialiser une base de données. Par défaut, le projet `sf_sandbox` utilisera une base de données nommée `sandbox.db` située dans `sf_sandbox/data/`. Pour créer la structure de table à partir du fichier SQL, saisissez : 
    108103 
    109104> $ symfony propel-insert-sql 
    111106 
    112107> **NOTE** 
    113 > Ne vous inquiétez, il est normal qu'un avertissement apparaisse à ce moment là, c'est normal. La commande `insert-sql` efface les tables existantes avant de créer celles de votre fichier `lib.model.schema.sql` or il n'existe pas encore de tables à effacer. 
     108> Ne vous inquiétez pas, il est normal qu'un avertissement apparaisse à ce moment là. La commande `insert-sql` efface les tables existantes avant de créer celles de votre fichier `lib.model.schema.sql` or il n'existe pas encore de tables à effacer. 
    114109 
    115110## Créer la structure de l'application 
    116111 
    117 Les fonctionnalités classiques d'un blog sont de créer, récupérer, modifier et supprimer des articles et des commentaires. En anglais "Create, Retrieve, Update, Delete" donne l'acronyme CRUD. Comme vous découvrez Symfony, vous n'écrirez pas du code Symfony à partir de rien, mais vous laisserez Symfony fabriquer une structure que vous pourrez ensuite utiliser et modifier comme il vous plaira. Symfony peut interpréter le modèle de données pour générer l'interface CRUD automatiquement. 
    118  
     112Les fonctionnalités classiques d'un blog sont de créer, récupérer, modifier et supprimer des articles et des commentaires. En anglais "Create, Retrieve, Update, Delete" donne l'acronyme CRUD. Comme vous découvrez Symfony, vous n'écrirez pas de code Symfony dans le vide, mais vous laisserez Symfony fabriquer une structure que vous pourrez ensuite utiliser et modifier comme il vous plaira. Symfony peut interpréter le modèle de données pour générer l'interface CRUD automatiquement. 
    119113 
    120114 > $ php symfony propel-generate-crud frontend post Post 
    122116 > $ php symfony clear-cache 
    123117 > 
    124  > On *nix systems, you will have to change some rights
     118 > Sur les système *nix, vous devrez modifier certains droits
    125119 > $ chmod 777 data 
    126120 > $ chmod 777 data/sandbox.db 
    144138 
    145139> **NOTE** 
    146 > Dans les URLs ci-dessus, le nom du script principal (le *contrôleur principal* dans Symfony)  a été changé de `index.php` à `frontend_dev.php`. Les deux scripts accèdent à la même application mais dans deux environnements différents . Avec `frontend_dev.php`, vous accédez à l'application dans **l'environnement de développement** qui possède des outils pratiques comme la barre d'outils de debug dans le coin supérieur droit de l'écran et l'outil de configuration rapide. C'est pourquoi la création de chaque page est plus lente que lors de l'utilisation de `index.php` qui est le contrôleur principal de **l'environnement de production**, optimisé être rapide. Si vous voulez préférez utiliser l'environnement de production, remplacez `frontend_dev.php/` par `index.php/` dans les URLs suivantes et n'oubliez pas de vider le cache après : 
    147  
    148  
    149      
     140> Dans les URLs ci-dessus, le nom du script principal (le *contrôleur principal* dans Symfony) a été changé de `index.php` à `frontend_dev.php`. Les deux scripts accèdent à la même application mais dans deux environnements différents . Avec `frontend_dev.php`, vous accédez à l'application dans **l'environnement de développement** qui possède des outils pratiques comme la barre d'outils de debug dans le coin supérieur droit de l'écran et l'outil de configuration rapide. C'est pourquoi la création de chaque page est plus lente que lors de l'utilisation de `index.php` qui est le contrôleur principal de **l'environnement de production**, prévu pour être plus rapide. Si vous préférez utiliser l'environnement de production, remplacez `frontend_dev.php/` par `index.php/` dans les URLs suivantes et n'oubliez pas de vider le cache après : 
     141 
    150142> > $ symfony clear-cache 
    151143> > 
    152144> > http://localhost/sf_sandbox/web/index.php/ 
    153      
    154145 
    155146Plus d'informations sur les [environnements] (http://www.symfony-project.com/content/book/page/configuration.html). 
    159150Afin de naviguer entre les deux modules, le blog a besoin d'une navigation globale. 
    160151 
    161 Modifiez le modèle global sf_sandbox/apps/frontend/templates/layout.php et changez le contenu de la balise <body> par: 
     152Modifiez le gabarit principal `sf_sandbox/apps/frontend/templates/layout.php` et changez le contenu de la balise <body> par: 
    162153 
    163154    [php] 
    180171Veuillez excuser la pauvreté du design et l'utilisation des styles à l'intérieur des balises, mais une heure c'est peu de temps. 
    181172 
    182 http://www.symfony-project.com/images/tutorials/first_crud_layout.gif 
     173![First Crud Layout] (http://www.symfony-project.com/images/tutorials/first_crud_layout.gif) 
    183174 
    184175Profitez-en pour changer le titre de vos pages. Editez le fichier de configuration de la vue de l'application (`sf_sandbox/apps/frontend/config/view.yml`), trouvez la ligne de la clef `title` et changez-là par ce qui suit : 
    185  
    186176 
    187177default: http_metas: content-type: text/html; charset=utf-8 
    202192    [php] 
    203193    public function executeIndex() 
    204 
    205 
     194   
     195   
    206196 
    207197Editez aussi le fichier `sf_sandbox/apps/frontend/modules/main/templates/indexSuccess.php` pour personnaliser le message d'accueil : 
    226216![First Welcom] (http://www.symfony-project.com/images/tutorials/first_welcome.gif) 
    227217 
    228 Dès maintenant vous pouvez commencez à utiliser votre nouvelle application web : Créez un nouveau post de test et un nouveau commentaire de test à ce Post
     218Dès maintenant vous pouvez commencez à utiliser votre nouvelle application web : Créez un nouveau article de test et un nouveau commentaire de test à cet article
    229219 
    230220Plus d'informations sur les [vues et la mise en page] (http://www.symfony-project.com/book/trunk/07-Inside-the-View-Layer). 
    232222## Passer des données depuis l'action au modèle 
    233223 
    234 Rapide n'est-ce pas ? Maintenant il est temps d'associer le module `comment` avec `post` afin d'afficher les commentaires sous les post
    235  
    236 Tout d'abord, il faut que les les commentaires associés soient mis à disposition du modèle d'affichage des posts. Dans Symfony, ce type de logique est classée dans les **actions**. Editez le fichier des actions `sf_sandbox/apps/frontend/modules/post/actions/actions.class.php` et modifiez la méthode `executeShow()` en y ajoutant les 4 dernières lignes : 
     224Rapide n'est-ce pas ? Maintenant il est temps d'associer le module `comment` avec `post` afin d'afficher les commentaires sous les articles
     225 
     226Tout d'abord, il faut que les commentaires associés soient mis à disposition du gabarit des articles. Dans Symfony, ce type de logique est classée dans les **actions**. Editez le fichier des actions `sf_sandbox/apps/frontend/modules/post/actions/actions.class.php` et modifiez la méthode `executeShow()` en y ajoutant les 4 dernières lignes : 
    237227 
    238228    [php] 
    250240 
    251241 
    252 Les objets `Criteria` et `-Peer` font partie de la couche ORM Propel. Ces 4 lignes exécuteront une requête SQL sur la table `Comment` pour récupérer les commentaires liés au Post courant (celui désigné par le paramètre `id` dans l'URL). La ligne `$this->comments` dans l'action donnera accès à la variable `$comment` dans le modèle correspondant. Maintenant modifiez le modèle d'affichage du post `sf_sandbox/apps/frontend/modules/post/templates/showSuccess.php` en y ajoutant à la fin : 
     242Les objets `Criteria` et `-Peer` font partie de la couche ORM Propel. Ces 4 lignes exécuteront une requête SQL sur la table `Comment` pour récupérer les commentaires liés à l'article courant (celui désigné par le paramètre `id` dans l'URL). La ligne `$this->comments` dans l'action donnera accès à la variable `$comment` dans le modèle correspondant. Maintenant modifiez le gabarit d'affichage de l'article dans `sf_sandbox/apps/frontend/modules/post/templates/showSuccess.php` en y ajoutant à la fin : 
    253243 
    254244    [php] 
    269259 
    270260 
    271 Cette page utilise de nouvelles fonction PHP (`format_date()` et `simple_format_text()`) fournies par Symfony, appelées 'helpers' (NdT volontairement non traduits) parce qu'elles font certaines tâches à votre place qui auraient normalement exigé plus de temps et de code. Créez un nouveau commentaire à votre premier post, puis vérifiez de nouveau le premier post, soit en cliquant sur son numéro dans la list, soit en tapant directement : 
     261Cette page utilise de nouvelles fonction PHP (`format_date()` et `simple_format_text()`) fournies par Symfony, appelées 'helpers' (NdT : Volontairement non traduits) parce qu'elles font certaines tâches à votre place qui auraient normalement exigées plus de temps et de code. Créez un nouveau commentaire à votre premier article, puis vérifiez le de nouveau, soit en cliquant sur son numéro dans la liste, soit en saisissant directement : 
     262 
    272263* * * 
    273264http://localhost/sf_sandbox/web/frontend_dev.php/post/show?id=1 
    282273## Ajouter un enregistrement relatif à une autre table 
    283274 
    284 En ajoutant un commentaire, vous pouvez choisir l'`id` du post relatif, mais ce n'est pas très intuitif. Par conséquent nous allons changer ça et nous assurer que l'utilisateur reviendra au post qu'il lisait avant d'ajouter le commentaire. 
     275En ajoutant un commentaire, vous pouvez choisir l'`id` de l'article relatif, mais ce n'est pas très intuitif. Par conséquent nous allons changer ça et nous assurer que l'utilisateur reviendra à l'article qu'il lisait avant d'y ajouter un commentaire. 
    285276 
    286277D'abord, dans le modèle `modules/post/templates/showSuccess.php`, ajouter cette ligne à la fin : 
    289280    <?php echo link_to('Add a comment','comment/create?post_id='.$post->getId()) ?> 
    290281 
    291 Le helper `link_to()` crée un hyperlien poitant vers l'action `create` du module `comment`, vous pouvez ainsi ajouter un commentaire directement depuis la page de détails du post. Ensuite, ouvrez `modules/comment/templates/editSuccess.php` et remplacez-y les lignes suivantes : 
     282Le helper `link_to()` crée un hyperlien poitant vers l'action `create` du module `comment`, vous pouvez ainsi ajouter un commentaire directement depuis la page de détails de l'article. Ensuite, ouvrez `modules/comment/templates/editSuccess.php` et remplacez-y les lignes suivantes : 
    292283 
    293284    [php] 
    311302    <?php endif ?> 
    312303 
    313 Dans la page `comment/create` le formulaire pointe vers une action `comment/update`, qui redirige vers `comment/show` quand il est soumis (ceci est le comportement par défaut dans les CRUDs générés). Pour un blog, cela veut dire qu'après avoir ajouté un commentaire à un post, le détail de ce commentaire est affiché. Il serait plus logique d'afficher le post avec les commentaires. Ouvrez donc `modules/comment/actions/actions.class.php` et observez la méthode `executeUpdate()`. Notez que le champ `created_at` n'est pas défini dans l'action : Symfony sait qu'un champ nommé `created_at` doit être mis à jour avec la valeur de l'heure système quand un enregistrement est créé. La redirection finale de l'action doit être modifiée pour pointer vers la bonne action. Changez-la en : 
     304Dans la page `comment/create` le formulaire pointe vers une action `comment/update`, qui redirige vers `comment/show` quand il est soumis (ceci est le comportement standard dans les CRUDs générés). Pour un blog, cela veut dire qu'après avoir ajouté un commentaire à un article, le détail de ce commentaire est affiché. Il serait plus logique d'afficher l'article avec ses commentaires. Ouvrez donc `modules/comment/actions/actions.class.php` et observez la méthode `executeUpdate()`. Notez que le champ `created_at` n'est pas défini dans l'action : Symfony sait qu'un champ nommé `created_at` doit être mis à jour avec la valeur de l'heure système quand un enregistrement est créé. La redirection finale de l'action doit être modifiée pour pointer vers la bonne action. Changez-la en : 
    314305 
    315306   [php] 
    338329 
    339330 
    340 Les utilisateurs peuvent maintenant ajouter des commentaires à des posts et revenir sur le post après coup. Vous vouliez un Blog ? Vous avez un blog  
     331Les utilisateurs peuvent maintenant ajouter des commentaires à des articles et revenir sur cet article après coup. Vous vouliez un Blog ? Vous avez un blog  
    341332 
    342333Plus d'informations sur les [actions] (http://www.symfony-project.com/book/trunk/06-Inside-the-Controller-Layer). 
    344335## Le formulaire de validation 
    345336 
    346 Le visiteur peut valider un commentaire sans rien y saisir et cela risque de polluer la base de données. Afin d'éviter cela, créez un fichier `update.yml`dans le répertoire `sf_sandbox/apps/frontend/modules/comment/validate/` (créez le si besoin est) et saisissez-y : 
     337Le visiteur peut valider un commentaire sans rien y saisir et cela risque de polluer la base de données. Afin d'éviter cela, créez un fichier `update.yml` dans le répertoire `sf_sandbox/apps/frontend/modules/comment/validate/` (créez-le si besoin est) et saisissez-y : 
    347338 
    348339 
    374365 
    375366>**NOTE** 
    376 > Faites attention à ne pas copier les 4 espaces au début de chaque lignes sinon l'interpreteur YAML echouera. Le premier caractère du fihicer doit être le 'm' de 'methods' 
    377  
    378 L'activation de `fillin` permet de renseigner les champs du formulaire avec les valeurs précédemment saisi au cas où la validation échouerait. L'ensemble des déclarations de la partie `names` précise les règles associés à chacun de ces champs du formulaire. 
    379  
    380 Par lui même, le contrôleur redirigerat l'utilisateur vers le modèle `updateError.php` si une erreur est détectée. Il serait mieux que la page soit réaffichée avec un message d'erreur. Pour ce faire, ajoutez une méthode `handleError` à la classe d'actions du fichier `modules/comment/actions/actions.class.php`: 
     367> Faites attention à ne pas copier les 4 espaces au début de chaque lignes sinon l'interpreteur YAML échouera. Le premier caractère du fihicer doit être le 'm' de 'methods'. 
     368 
     369L'activation de `fillin` permet de renseigner les champs du formulaire avec les valeurs précédemment saisies au cas où la validation échouerait. L'ensemble des déclarations de la partie `names` précise les règles associés à chacun de ces champs du formulaire. 
     370 
     371Par lui même, le contrôleur redirigera l'utilisateur vers le gabarit `updateError.php` si une erreur est détectée. Il serait mieux que la page soit réaffichée avec un message d'erreur. Pour ce faire, ajoutez une méthode `handleError` à la classe d'actions du fichier `modules/comment/actions/actions.class.php`: 
    381372 
    382373    [php] 
    409400## Changer l'aspect des URL 
    410401 
    411 Avez-vous noter que les URL sont interprétées ? Il est possible de les rendre plus compréhensible pour l'utilisateur mais surtout pour les moteurs de recherche. Nous allons utiliser les titres des posts comme URL pour ces post
    412  
    413 Les problème est alors que les titres contiennent des caractères spéciaux comme les espaces et que cela risque de polluer les URL finales avec des '%20' et autres symboles dans le genre. Vous allez donc devoir créer une nouvelle méthode dans l'objet `Post` afin d'obtenir des titre propre et dépouillés. 
     402Avez-vous noté que les URL sont interprétées ? Il est possible de les rendre plus compréhensible pour l'utilisateur mais surtout pour les moteurs de recherche. Nous allons utiliser les titres des articles comme URL pour ces article
     403 
     404Les problème est alors que les titres contiennent des caractères spéciaux comme les espaces et que cela risque de polluer les URL finales avec des '%20' et autres symboles dans le genre. Vous allez donc devoir créer une nouvelle méthode dans l'objet `Post` afin d'obtenir des titres propres et dépouillés. 
    414405Pour faire cela, éditez le fichier `Post.php` situé dans le répertoire `sf_sandbox/lib/model/ directory` et ajoutez-y la méthode suivante : 
    415406 
    454445    } 
    455446 
    456 La liste des post peut maintenant utiliser l'action `permalink` à la place de l'action `show`pour chacun des posts. Dans le module `modules/post/templates/listSuccess.php', supprimer l'entête `id` et ces cellules et modifier la cellule Title de :  
     447La liste des articles peut maintenant utiliser l'action `permalink` à la place de l'action `show`pour chacun des articles. Dans le module `modules/post/templates/listSuccess.php', supprimer l'entête `id` et ces cellules et modifier la cellule Title de :  
    457448 
    458449    [php] 
    466457 
    467458 
    468 En derière chose à faire : editez le fichier `routing.yml` du répertoire `sf_sandbox/apps/frontend/config/` et ajoutez-y ces règles au début : 
     459Une dernière chose à faire : éditez le fichier `routing.yml` du répertoire `sf_sandbox/apps/frontend/config/` et ajoutez-y ces règles au début : 
    469460 
    470461 
    485476## Nettoyer le frontend 
    486477 
    487 S'il s'agit d'un weblog, tout le monde a le droit de poster? Ce n'est pas exactement ce à quoi vous pensiez, n'est-ce pas ? Très bien, nettoyons un peut nos gabarits 
     478S'il s'agit d'un weblog, tout le monde a le droit de poste. Ce n'est pas exactement ce à quoi vous pensiez, n'est-ce pas ? Très bien, nettoyons un peut nos gabarits. 
    488479 
    489480Dans le gabarit `modules/post/templates/showSuccess.php` débarssez-vous du lien 'edit' en supprimant la ligne : 
    504495 * executeDelete 
    505496 
    506 Voilà, les lecteur ne peuvent plus poster. 
     497Voilà, les lecteurs ne peuvent plus poster. 
    507498 
    508499## Generation du backend 
    509500 
    510 Pour que vous puissiez rédiger des posts, créons une application backend par la ligne de commande (toujours à partir du répertoire `sf_sandbox` du projet ) : 
     501Pour que vous puissiez rédiger des articles, créons une application backend par la ligne de commande (toujours à partir du répertoire `sf_sandbox` du projet ) : 
    511502 
    512503> $ symfony init-app backend 
    517508Cette fois-ci nous utiliserons le [générateur d'administration] (http://www.symfony-project.com/book/trunk/14-Generators) qui offre plus d'options et de personnalisations que le très simple générateur CRUD. 
    518509 
    519 Comme vous l'avez fait pour le frontend, éditez le gabarit principal (`apps/backend/template/layout.php` et ajoutez-y la navigation globale : 
     510Comme vous l'avez fait pour le frontend, éditez le gabarit principal (`apps/backend/template/layout.php`) et ajoutez-y la navigation globale : 
    520511 
    521512    [php] 
    586577## Restreindre l'accès au backend 
    587578 
    588 Pour le moment, le backend est accessible à tous. Vous devez y ajouter une restriction d'accès 
     579Pour le moment, le backend est accessible à tous. Vous devez y ajouter une restriction d'accès. 
    589580 
    590581Dans `apps/backend/modules/post/config/`, ajoutez un `security.yml` avec le contenu suivant : 
    593584      is_secure: on 
    594585 
    595 Répetez cette opérations pour le module `comment`. Maintenant vous ne pouvez plus accéder à ces modules a moins que vous soyez identifié  
    596  
    597 Mais l'action d'identification 'existe pas! Très bien, vous pouvez l'ajouter simplement. Tout d'abord, créez les squelette du module de sécurité : 
     586Répetez cette opération pour le module `comment`. Maintenant vous ne pouvez plus accéder à ces modules à moins d'être identifié. 
     587 
     588Mais l'action d'identification n'existe pas! Très bien, vous pouvez l'ajouter simplement. Tout d'abord, créez le squelette du module de sécurité : 
    598589 
    599590> $ symfony init-module backend security 
    600591 
    601 Ce nouveau module sera utiliser pour gérer le login et l'interrogation. Editez `apps/backend/modules/security/templates/indexSuccess.php` pour créer le formulaire de login : 
     592Ce nouveau module sera utilisé pour gérer le login et ces requêtes associées. Editez `apps/backend/modules/security/templates/indexSuccess.php` pour créer le formulaire de login : 
    602593 
    603594   [php] 
    618609    </form> 
    619610 
    620 Ajoutez l'action `login` qui sera employé pour le module `sécurité` (dans le fichier `apps/backend/modules/security/actions/actions.class.php`) : 
     611Ajoutez l'action `login` qui sera employée pour le module `sécurité` (dans le fichier `apps/backend/modules/security/actions/actions.class.php`) : 
    621612 
    622613    [php] 
    635626    } 
    636627 
    637 De même que pour le module `main` supprimer les code du fichier `index` comme suit : 
     628De même que pour le module `main` supprimer le code du fichier `index` comme suit : 
    638629 
    639630    [php] 
    650641 
    651642 
    652 A partir de maintenant, si vous essayez d'accéder à l'administration des posts, vous devrez entrer un nom d'utilisateur et un mot de passe : 
     643A partir de maintenant, si vous essayez d'accéder à l'administration des articles, vous devrez entrer un nom d'utilisateur et un mot de passe : 
    653644 
    654645![First Login] (http://www.symfony-project.com/images/tutorials/first_login.gif)