Changeset 25626
- Timestamp:
- 12/19/09 14:25:53 (3 years ago)
- Files:
-
- doc/branches/1.2/jobeet/fr/01.txt (modified) (24 diffs)
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
doc/branches/1.2/jobeet/fr/01.txt
r23298 r25626 5 5 ------------ 6 6 7 Le framework symfony est un projet Open-Sourcedepuis plus de 3 ans. Il est8 .devenu l'un des plus populaire framework PHP grâce à ses fonctionnalités et sa7 Le ~framework|Framework~ symfony est un projet ~Open-Source~ depuis plus de 3 ans. Il est 8 devenu l'un des plus populaire framework PHP grâce à ses fonctionnalités et sa 9 9 bonne documentation. Cette grande tradition à commencer dès le début. 10 10 11 11 En Décembre 2005, après la première version officielle de symfony, nous avons 12 12 publié "[le tutorial Askeet](http://www.symfony-project.org/askeet/1_0/fr/)", 13 une série de 24 tutoriaux publiés jour par jour entre le 1er Décembre et Noël. 14 15 Ce tutorial a prouvé qu'il était un formidable outils pour promouvoir le 16 framework aux nouveaux développeurs. Beaucoup de développeurs ont appris symfony 17 grâce à askeet, et beaucoup d'entreprises l'utilisent encore aujourd'hui comme 18 principal support d'apprentissage. 19 20 Nous célébrons actuellement la version 1.2 de symfony et le tutorial askeet 21 commence à montrer son âge. C'est le temps pour un nouveau tutorial tout 22 frais. 23 24 Découvrez Jobeet, le tutorial du calendrier l'Avent 2008 ! 13 une série de 24 tutoriels publiés jour par jour entre le 1er Décembre et Noël. 14 15 Ce tutoriel a prouvé qu'il était un formidable outil pour promouvoir le framework aux 16 nouveaux développeurs. Beaucoup de développeurs ont appris symfony grâce à askeet, et beaucoup 17 d'entreprises l'utilisent encore aujourd'hui comme principal support d'apprentissage. 18 19 Mais le tutoriel askeet a commencé à montrer son âge et avec la publication de 20 symfony 1.2, nous avons décidé de publier un nouveau calendrier de l'avent, Jobeet. 21 22 Ce tutoriel a été publié au jour le jour sur le blog de symfony en 2008, 23 et vous lisez son incarnation en livre. 25 24 26 25 Le défi 27 26 ------- 28 27 29 C'est vrai, nous le faisons à nouveau. Chaque jour, week-end inclus, nous 30 publierons un nouveau tutorial. Chaque tutorial dure 1 heure, et ce sera 31 l'occasion de développer un vrai site web du début à la fin. 28 Chaque chapitre/jour est destiné à durer environ une heure, et sera l'occasion 29 d'apprendre symfony en codant un vrai site web, du début à la fin. 32 30 33 31 24 fois une heure est égal à un jour, nous pensons que c'est le temps nécessaire 34 à un développeur pour apprendre les bases de symfony. Chaque jour nous32 à un développeur pour apprendre les bases de symfony. Chaque jour, nous 35 33 ajouterons de nouvelles fonctionnalités à l'application. Nous en profiterons 36 34 pour vous présenter les nouvelles fonctionnalités de symfony ainsi que les 37 35 bonnes pratiques de développement web. 38 36 39 Pour askeet, le 21ième jour était : "payez vous un gourou symfony pour un jour". 40 Nous n'avions pas de plan et la communauté devait nous proposer une 41 fonctionnalité à ajouter à askeet. Ce fût un énorme succès et la communauté 42 décida que l'application devait avoir un moteur de recherche. Et nous l'avons 43 fait. Le 21ième jour a également montré, que c'était l'un des plus populaires du 44 tutorial askeet. 45 46 Pour Jobeet, nous allons célébré le jour de l'hiver ce 21 Décembre par un "jour 47 du design". Après le 4ième jour, nous allons avoir tout le code HTML et CSS 48 nécessaire pour commencer le conception graphique du site web public de Jobeet. 49 Donc si vous travaillez avec un graphiste, ou que votre entreprise a un 50 département avec des graphistes, vous êtes alors capable de proposer une 51 conception graphique. Le 21 Décembre, nous proposerons un sondage, et la 52 communauté choisira la conception graphique fournie avec Jobeet. Vous serez bien 53 sûr dans les crédits et vous aurez la célébrité qui va avec ! 54 55 Ce tutorial est différent 37 Pour askeet, le 21ième jour était : "payez vous un gourou symfony pour un jour". Nous n'avions 38 pas de plan et la communauté devait nous proposer une fonctionnalité à ajouter à askeet. Ce fût un 39 énorme succès et la communauté décida que l'application devait avoir un moteur de 40 recherche. Et nous l'avons fait. Le 21ième jour a également montré, que c'était l'un des 41 plus populaires du tutoriel askeet. 42 43 Pour Jobeet, nous avons célébré le jour de l'hiver ce 21 Décembre par un "jour du design". Le 44 design gagnant a été présenté par le centre{source}, et est utilisé dans ce tutoriel 45 pour le design par défaut. Il est également utilisé pour le design du site Jobeet. 46 47 Ce tutoriel est différent 56 48 -------------------------- 57 49 58 Souvenez-vous des premiers jours de PHP4. Ah,la [Belle 59 Époque](http://fr.wikipedia.org/wiki/Belle_Époque)! PHP était un des premiers 60 langages dédiés au web et un des plus simples à apprendre. 61 62 Mais comme les technologies du web évoluent à un rythme très rapide, les 63 développeurs doivent se tenir informé des dernières bonnes pratiques et des 64 derniers outils. La meilleure façon d'apprendre est de lire des articles de blog, 65 des tutoriaux, et des livres. Nous en avons beaucoup lu, que ce soit pour du 66 PHP, Python, Java, Ruby, ou Perl, et beaucoup d'entre eux commencent à être 67 limités lorsque l'auteur donne des bouts de code à titre d'exemple. 68 69 Vous avez probablement lu des avertissements comme ceux-ci : 70 71 "Pour une application réelle, n'oubliez pas de gérer la validation et la 72 gestion des erreurs." 73 74 ou 75 76 "La sécurité n'est pas abordé car c'est un exercice." 77 78 ou 79 80 "Vous devez bien sûr écrire des tests." 81 82 Comment ? Ces choses sont sérieuses. Ce sont probablement les parties les plus 83 importantes de n'importe quelle partie du code. Et comme un lecteur, on vous 84 laisse seul avec. Sans prendre en compte ces sujets, les exemples sont moins 85 utiles. Vous ne pouvez pas les utilise comme bon point de départ. C'est mauvais 86 ! Pourquoi ? Parce que la sécurité, la validation, la gestion des erreurs, et 87 les tests, pour ne nommer qu'eux, sont à prendre en compte pour bien développer. 88 89 Dans ce tutorial, vous ne lirez jamais d'avertissements comme ceux cités 90 ci-dessus car nous allons écrire des tests, du code pour la gestion d'erreur ou 91 de validation, et soyez certain que nous allons développer une application 92 sécurisée. C'est pourquoi symfony traite du code, mais également des bonnes 93 pratiques et comment développer des applications professionnelles pour les 94 entreprises. Nous allons nous permettre ce luxe car symfony fournit tous les 95 outils pour développer facilement ces aspects sans écrire trop de ligne de code. 96 97 La validation, la gestion des erreurs, la sécurité, et les tests sont des 98 citoyens de première classe dans symfony, cela ne prendra pas trop de temps à 99 expliquer. C'est seulement une des raisons pour utiliser un framework pour les 100 projets "de la vie réelle". 101 102 Le code que vous lirez dans ces tutoriaux est du code que vous pouvez utilisez 103 dans vos projets. Nous vous encourageons à copier et coller des bouts de code ou 104 voler des parties entières. 50 Rappelez-vous les premiers jours de PHP4. 51 Ah, la [Belle Epoque](http://en.wikipedia.org/wiki/Belle_Époque) ! PHP est l'un 52 des premiers langages dédiés au web et l'un des plus facile à apprendre. 53 54 Mais comme les technologies du web évoluent à un rythme très rapide, les développeurs Web doivent se tenir 55 au courant sur les dernières meilleures pratiques et les outils. La meilleure façon d'apprendre est bien sûr 56 par la lecture des blogs, des tutoriels et des livres. Nous avons lu beaucoup d'entre eux, qu'ils 57 soient écrits pour PHP, Python, Java, Ruby ou Perl, et beaucoup d'entre eux nous laisse sur notre faim lorsque 58 l'auteur commence à donner des morceaux de codes à titre d'exemples. 59 60 Vous êtes sans doute habitués à lire des avertissements du genre: 61 62 «Pour une application réelle, n'oubliez pas d'ajouter la validation et la manipulation d'erreur appropriée.» 63 64 Ou 65 66 «La sécurité est laissée en exercice au lecteur.» 67 68 Ou 69 70 «Vous aurez bien sûr besoin d'écrire des tests.» 71 72 Pardon ? Ces choses sont sérieuses. Ils sont peut-être la partie la plus importante 73 de tout morceau de code. Et en tant que lecteur, on vous laisse seuls. Sans que ces préoccupations 74 soient prises en compte, les exemples sont beaucoup moins utiles. Vous ne pouvez pas les utiliser comme 75 un bon point de départ. C'est très grave ! Pourquoi ? Parce que la sécurité, la validation, le traitement 76 des erreurs et les tests, pour n'en nommer que quelques-uns, sont importants pour avoir un bon code. 77 78 Dans ce tutoriel, vous ne verrez jamais des déclarations car nous allons écrire des tests, 79 la gestion d'erreur, le code de validation, et soyez sûr que nous développons une application sécurisée. 80 C'est parce que symfony est sur??? le code, mais également sur les meilleures pratiques et comment 81 développer des applications professionnelles pour l'entreprise. Nous serons en mesure 82 de se permettre ce luxe, car symfony fournit tous les outils nécessaires pour coder ces 83 aspects aisément sans écrire trop de code. 84 85 La validation, la manipulation d'erreur, la sécurité, et les tests sont des citoyens de première classe 86 dans symfony, ainsi cela ne nous prendra pas trop de temps à expliquer. Ce n'est là qu'une des nombreuses 87 raisons d'utiliser un framework pour la «vie réelle» des projets. 88 89 Tout le code que vous lirez dans ce tutoriel est un code que vous pourriez utiliser pour un projet 90 réel. Nous vous encourageons à copier/coller des bouts de code ou de voler des morceaux 91 entiers. 105 92 106 93 Le Projet … … 108 95 109 96 L'application qui va être conçue aurait pu être encore un autre moteur de blog. 110 Mais nous voulons utiliser symfony pour un projet utile. L'objectif est de 111 montrer que symfony peut être utilisé pour développer des applications 112 professionnelles avec du style et le moindreeffort.97 Mais nous voulons utiliser symfony pour un projet utile. L'objectif est de montrer 98 que symfony peut être utilisé pour développer des applications professionnelles avec du style 99 et peu d'effort. 113 100 114 101 Nous conserverons le contenu du projet secret jusqu'au prochain jour car nous … … 116 103 **Jobeet**. 117 104 118 Au menu aujourd'hui?105 Qu'allons nous faire aujourd'hui ? 119 106 -------------------- 120 107 121 Comme 24 heures représente un temps suffisant pour développer une application122 avec symfony, nous n'écrirons pas de code aujourd'hui. Mais même sans écrire une 123 ligne de code, vous allez commencer à comprendre les bénéfices de l'utilisation124 d'un framework comme symfony seulement enmettant en place un nouveau projet.125 126 L'objectif du jour est d'installer l'environnement de développement et 127 d'afficher une page de l'application dans un navigateur. Cela demande 128 d'installersymfony, de créer une application, et de configurer un serveur web.129 130 Pré requis108 Comme 24 heures représentent un temps suffisant pour développer une application avec symfony, nous n'écrirons 109 pas de code PHP aujourd'hui. Mais même sans écrire une ligne de code, vous allez 110 commencer à comprendre les bénéfices de l'utilisation d'un framework comme symfony seulement en 111 mettant en place un nouveau projet. 112 113 L'objectif du jour est d'installer l'environnement de développement et d'afficher 114 une page de l'application dans un navigateur. Cela demande d'installer 115 symfony, de créer une application, et de configurer un serveur web. 116 117 Prérequis 131 118 --------- 132 119 133 120 Avant tout, vérifiez que vous avez un environnement de développement web avec 134 un serveur web ( Apache par exemple ), un moteur de base de données ( Mysql, 135 PostgreSQL, SQLite), et PHP dans sa version 5.2.4 ou supérieure. 136 137 Comme nous utilisons beaucoup la ligne de commande, il est préférable 138 d'utiliser un Unix-like OS. Si vous utilisez un système Windows, cela 139 fonctionnera également, vous devrez seulement taper quelques commandes dans la 140 fenêtre `cmd`. 121 un serveur web (Apache par exemple), un moteur de base de données (Mysql, PostgreSQL, 122 SQLite), et PHP dans sa version 5.2.4 ou supérieure. 123 124 Comme nous utilisons beaucoup la ligne de commande, il est préférable d'utiliser un Unix-like OS. 125 Si vous utilisez un système Windows, cela fonctionnera également, vous devrez seulement taper 126 quelques commandes à l'invite de `cmd`. 141 127 142 128 >**Note** 143 >Les commandes shell Unix sont pratiques dans un environnement Windows.144 >Si vous voulez utilise z des outils comme `tar`, `gzip`, ou `grep` dans Windows145 >vous pouvez installer [Cygwin](http://cygwin.com/). La documentation officielle 146 > est un peutpetite, mais un bon guide d'installation est disponible129 >Les commandes shell Unix sont pratiques dans un environnement ~Windows~. 130 >Si vous voulez utiliser des outils comme `tar`, `gzip`, ou `grep` dans Windows, 131 >vous pouvez installer [Cygwin](http://cygwin.com/). La documentation officielle est un peu 132 >petite, mais un bon guide d'installation est disponible 147 133 >[ici](http://www.soe.ucsc.edu/~you/notes/cygwin-install.html). 148 >Les aventuriers pourront essayer 149 >[Windows Services for Unix](http://technet.microsoft.com/en-gb/interopmigration/bb380242.aspx). 150 >de Microsoft. 151 152 Comme ce tutoriel se concentre plus particulièrement sur le framework symfony, 153 nous considérerons que vous disposez déjà d'un solide bagage en PHP5 et programmation 154 Orientée Objet. 155 156 L'installation de Symfony 134 >Les aventureux pourront essayer les 135 >[Windows Services for Unix](http://technet.microsoft.com/en-gb/interopmigration/bb380242.aspx) de Microsoft. 136 137 Comme ce tutoriel se concentre plus particulièrement sur le framework symfony, nous considérerons que 138 vous disposez déjà d'un solide bagage en PHP5 et programmation Orientée Objet. 139 140 L'installation de symfony 157 141 ------------------------- 158 142 159 Premièrement, créer un répertoire pour enregistrer les fichiers du projet Jobeet 160 : 143 Premièrement, créer un répertoire pour enregistrer les fichiers du projet Jobeet : 161 144 162 145 $ mkdir -p /home/sfprojects/jobeet 163 146 $ cd /home/sfprojects/jobeet 164 147 165 PourWindows:148 Sous Windows: 166 149 167 150 c:\> mkdir c:\development\sfprojects\jobeet 168 151 c:\> cd c:\development\sfprojects\jobeet 169 152 170 >**Note**: Nous conseillons aux utilisateurs de windows de faire fonctionner 171 >symfony et d'installer leur nouveau projet dans un chemin qui ne contient pas 172 >d'espaces. 173 >Éviter d'utiliser le dossier `Documents and Settings` et `My Documents` 174 175 Créer un répertoire pour enregistrer les fichiers de la librairie du framework 176 symfony : 153 >**Note**: Nous conseillons aux utilisateurs de Windows de faire fonctionner symfony et d'installer leur nouveau 154 >projet dans un chemin qui ne contient pas d'espaces. 155 >Éviter d'utiliser le dossier `Documents and Settings` et 156 >`Mes Documents`. 157 158 Créer un répertoire pour enregistrer les fichiers de la librairie du framework symfony : 177 159 178 160 $ mkdir -p lib/vendor 179 161 180 Pour installer symfony, télécharger le [paquet de 181 l'archive](http://www.symfony-project.org/installation/1_2) sur le site de 182 symfony. Le tutorial est écrit pour symfony version 1.2, télécharger le dernière version 183 de l'archive pour cette version. 184 185 En dessous de la section "Source Download" vous trouverez l'archive au format 162 La [page d'installation](http://www.symfony-project.org/installation) sur le 163 site de symfony liste et compare toutes les versions disponibles de symfony. 164 165 Comme le tutoriel est écrit pour symfony version 1.2, 166 aller à la page d'installation pour 167 [symfony 1.2](http://www.symfony-project.org/installation/1_2). 168 169 En dessous de la section "**Source Download**", vous trouverez l'archive au format 186 170 `tgz` ou `.zip`. Téléchargez l'archive et mettez la dans le dossier `lib/vendor` 187 171 fraîchement créée, puis décompressez la. 188 172 189 173 $ cd lib/vendor 190 $ tar zxpf symfony-1.2-latest.tgz 191 $ mv symfony-1.2.0 symfony 192 193 Avec Windows dézipper l'archive zip peut être fait avec l'explorateur. Après 194 avoir renommé le répertoire par `symfony`, vous devriez avoir un répertoire 195 nommé `c:\development\sfprojects\jobeet\lib\vendor\symfony`. 174 $ tar zxpf symfony-1.2.2.tgz 175 $ mv symfony-1.2.2 symfony 176 $ rm symfony-1.2.2.tgz 177 178 Sous Windows, la décompression du fichier zip peut être fait avec l'explorateur. Après 179 avoir renommé le répertoire en `symfony`, vous devriez avoir un répertoire nommé 180 `c:\development\sfprojects\jobeet\lib\vendor\symfony`. 196 181 197 182 Comme la configuration de PHP varie d'une distribution à une autre, nous devons 198 vérifier que votre configuration répond aux exigences minimumde symfony.183 vérifier que votre configuration PHP répond aux exigences minimums de symfony. 199 184 Exécutez le script de vérification de configuration fournit avec symfony à 200 185 partir de la ligne de commande : … … 203 188 $ php lib/vendor/symfony/data/bin/check_configuration.php 204 189 205 S'il y a un problème, la sortie vous donnera les conseils pour le résoudre. 206 Comme la configuration de PHP peut être différente vous pouvez également 207 exécuter le script à partir d'un navigateur. Copier le script quelque part sous 208 la racine web de votre serveur web et appeler le fichier. N'oubliez pas 209 d'enlever le fichier par la suite. 210 211  190 S'il y a un problème, la sortie vous donnera les conseils pour le résoudre. Vous 191 devez également exécuter la vérification à partir d'un navigateur car la configuration PHP peut être 192 différente. Copiez le fichier quelque part dans le répertoire racine du serveur web et 193 accédez au fichier. N'oubliez pas de supprimer le fichier à partir du répertoire racine 194 web après: 195 196 $ rm web/check_configuration.php 197 198  212 199 213 200 Si le script n'affiche aucune erreur, vérifiez que symfony est installé 214 correctement en utilisant la ligne de commande de symfony pour afficher sa215 version ( la lettre `V` en majuscule) :201 correctement en utilisant la ~ligne de commande|Ligne de Commande~ de symfony pour afficher la 202 version (notez `V` en majuscule) : 216 203 217 204 $ php lib/vendor/symfony/data/bin/symfony -V 218 205 219 PourWindows:206 Sous Windows: 220 207 221 208 c:\> cd ..\.. … … 223 210 224 211 Si vous êtes curieux et que vous voulez voir ce que la ligne de commande peut 225 faire pour vous, tapez `symfony` pour lister les options et tâches disponibles :212 faire pour vous, tapez `symfony` pour lister les options et les tâches disponibles : 226 213 227 214 $ php lib/vendor/symfony/data/bin/symfony 228 215 229 PourWindows:216 Sous Windows: 230 217 231 218 c:\> php lib\vendor\symfony\data\bin\symfony 232 219 233 La ligne de commande symfony est l e meilleur amidu développeur. Elle fournit un220 La ligne de commande symfony est la meilleure amie du développeur. Elle fournit un 234 221 ensemble d'utilitaire qui augmente votre productivité pour vos activités de tous 235 les jours comme effacer le cache, générer du code, et beaucoup plus encore.222 les jours comme vider le cache, générer du code, et beaucoup plus encore. 236 223 237 224 Installation du Projet … … 240 227 Dans symfony les **applications** partagent le même modèle de données et sont 241 228 regroupées par **projets**. Pour le projet Jobeet nous aurons deux applications 242 différentes : une nommée frontend et l'autre backend.229 différentes : une nommée ~frontend|Frontend~ et l'autre ~backend|Backend~. 243 230 244 231 ### Création du Projet … … 249 236 $ php lib/vendor/symfony/data/bin/symfony generate:project jobeet 250 237 251 PourWindows:238 Sous Windows: 252 239 253 240 c:\> php lib\vendor\symfony\data\bin\symfony generate:project jobeet 254 241 255 La tâche `generate:project` génère la structurepar défaut des répertoires et242 La tâche `generate:project` génère la ~structure|Structure~ par défaut des répertoires et 256 243 crée les fichiers nécessaires d'un projet symfony. 257 244 … … 272 259 >structure par défaut des fichiers et répertoires de symfony, n'importe quel 273 260 >développeur connaissant symfony peut reprendre n'importe quel projet symfony. 274 >En quelques minutes, il sera à même de naviguer dans le code, de fixer les275 >bogues, et d'ajouter de nouvelles fonctionnalités. 276 277 La tâche `generate:project` a également cré eun raccourci `symfony` à la racine261 >En quelques minutes, il sera à même de naviguer dans le code, de corriger les 262 >bogues, et d'ajouter de nouvelles fonctionnalités. 263 264 La tâche `generate:project` a également créé un raccourci `symfony` à la racine 278 265 du projet Jobeet pour faciliter l'écriture de la commande lorsque vous exécutez 279 266 une tâche. 280 267 281 À partir de maintenant, au lieu d'utiliser le chemin complet pour ex ecuter la268 À partir de maintenant, au lieu d'utiliser le chemin complet pour exécuter la 282 269 commande symfony, nous utiliserons le raccourci `symfony`. 283 270 … … 286 273 Créez l'application frontend en exécutant la tâche `generate:app` : 287 274 288 $ php symfony generate:app --escaping-strategy=on --csrf-secret=Unique$ecret frontend 275 $ php symfony generate:app --escaping-strategy=on 276 ➥ --csrf-secret=UniqueSecret frontend 289 277 290 278 >**TIP** 291 > Le fichier symfony est executable, les utilisateurs Unix peuvent remplacer292 >chaque occurrence ' php symfony' par './symfony' dès maintenant.293 > 294 > Pour windows vous pouvez copier le fichier 'symfony.bat' dans votre projet et295 > utiliser 'symfony' à la place de 'php symfony':279 >Comme le raccourci symfony est exécutable, les utilisateurs Unix peuvent remplacer 280 >chaque occurrence '`php symfony`' par '`./symfony`' dès maintenant. 281 > 282 >Pour Windows vous pouvez copier le fichier '`symfony.bat`' dans votre projet et 283 >utiliser '`symfony`' à la place de '`php symfony`' : 296 284 > 297 285 > c:\> copy lib\vendor\symfony\data\bin\symfony.bat . 298 286 299 Une fois de plus, la tâche `generate:app` crée la structure par défaut des 300 répertoires de l'application dans le dossier `apps/frontend`. 301 302 | Directory | Description 303 | ---------- | ----------------------------------------------- 304 | config/ | Les fichiers de configuration de l'application 305 | lib/ | Les librairies et classes de l'application 306 | modules/ | Le code de l'application ( MVC ) 307 | templates/ | Les gabarits principaux 287 Basé sur le nom de l'application donnée comme *argument*, la tâche `generate:app` 288 crée la structure de répertoire par défaut nécessaire à l'application sous le 289 répertoire `apps/frontend` : 290 291 | Répertoire | Description 292 | ----------- | ----------------------------------------------- 293 | config/ | Les fichiers de configuration de l'application 294 | lib/ | Les librairies et classes de l'application 295 | modules/ | Le code de l'application (MVC) 296 | templates/ | Les Templates principaux 308 297 309 298 >**TIP** … … 314 303 pour la sécurité : 315 304 316 * `--escaping-strategy`: Active les échappements pour prévenir des attaques XSS 317 * `--csrf-secret`: Active les jetons de sessions des formulaires pour prévenir 318 des attaques CSRF 305 * `--escaping-strategy`: Active les échappements pour prévenir des attaques ~XSS~ 306 * `--csrf-secret`: Active les jetons de sessions des formulaires pour prévenir des attaques ~CSRF~ 319 307 320 308 En passant ces deux options à la tâche, nous avons sécurisé notre futur 321 309 développement des deux plus courantes vulnérabilités trouvées sur le web. 322 C'est bien, symfony va automatiquement prendre les mesures de sécuritépour310 C'est bien, symfony va automatiquement prendre les mesures de ~sécurité|Sécurité~ pour 323 311 nous. 324 312 325 313 >**NOTE** 326 314 >Si vous ne connaissez pas 327 >[XSS](http://fr.wikipedia.org/wiki/Cross-site_scripting) ou 328 >[CSRF](http:// fr.wikipedia.org/wiki/Cross-Site_Request_Forgeries), prenez le temps d'apprendre un peu315 >[XSS](http://fr.wikipedia.org/wiki/Cross-site_scripting) ou 316 >[CSRF](http://en.wikipedia.org/wiki/CSRF), prenez le temps d'apprendre un peu 329 317 >plus sur ces failles de sécurité. 330 318 … … 336 324 337 325 L'option `V` affiche également le chemin vers le répertoire d'installation de 338 symfony, que vous retrouvez également dans le fichier `config/ProjectConfiguration.class.php` :326 symfony, que vous retrouvez également dans le fichier `config/ProjectConfiguration.class.php` : 339 327 340 328 [php] … … 342 330 require_once '/Users/fabien/work/symfony/dev/1.2/lib/autoload/sfCoreAutoload.class.php'; 343 331 344 Pour une meilleur portabilité du projet, changez le chemin absolu de332 Pour une meilleure portabilité du projet, changez le chemin absolu de 345 333 l'installation de symfony par un chemin relatif : 346 334 … … 352 340 machine ou sur une autre, cela fonctionnera toujours. 353 341 354 Les environnements 355 -------------------- 356 357 Si vous jetez un œil au répertoire `web/`, vous trouvez deux fichiers PHP : 358 `index.php` et `frontend_dev.php`. Ces fichiers sont appelés **front 359 controllers** : toutes les requêtes vers l'application sont faites en passant 360 par eux. Mais pourquoi avons-nous 2 front controllers alors que nous n'avons 361 qu'une seule application ? 362 363 Les deux fichiers pointent sur la même application mais en utilisant deux 364 environnements différents. Lorsque vous développez une application, sauf si 365 vous développez directement sur le serveur de production, vous avez besoin de 366 plusieurs environnements. 367 368 * **L'environnement de développement** : c'est l'environnement utilisé par 369 **les développeurs** pour ajouter de nouvelles fonctionnalités, fixer les 370 bogues... 371 * **L'environnement de tests** : c'est l'environnement pour tester 372 automatiquement l'application. 373 * **L'environnement de recette** : c'est l'environnement utilisé par le 374 **client** pour tester l'application et faire un retour sur les bogues ou 375 les fonctionnalités manquantes. 376 * **L'environnement de production** : c'est l'environnement utilisé par 377 **l'utilisateur final** 378 379 Qu'est-ce qui fait qu'un environnement est unique ? Dans l'environnement de 380 développement, l'application doit 'loguée' tous les détails d'une requête pour 381 faciliter le 'débugage', elle doit également afficher les exceptions dans le 382 navigateur, mais le système de cache doit être désactivé car les changements 383 dans le code doivent être pris en compte de suite. Donc l'environnement de 384 développement doit être optimisé pour le développeur: 385 386  387 388 Par contre dans l'environnement de production, l'application doit afficher des 389 messages d'erreur adaptés à la place d'exceptions PHP, et bien sûr, le cache 390 doit être activé. Donc l'environnement de production doit être optimisé pour 391 la performance et l'expérience utilisateur. 392 393  394 395 Dans symfony un environnement est un jeu unique de paramètres de configuration 396 et symfony est installé avec trois d'entre eux : `dev`, `test`, et `prod`. 397 398 Si vous ouvrez les fichiers de front controllers, vous verrez que la seule 399 différence est le paramètre d'environnement : 342 Les ~environnements~ 343 ------------------ 344 345 Si vous regarder le répertoire `web/`, vous trouverez deux fichiers PHP : 346 `index.php` et `frontend_dev.php`. Ces fichiers sont appelés **~contrôleurs 347 frontaux|Contrôleurs Frontaux~**; toutes les requêtes de l'application 348 se font par leur intermédiaire. Mais pourquoi nous avons deux contrôleurs frontaux alors que nous avons 349 qu'une application ? 350 351 Les deux fichiers pointent sur la même application mais pour des environnements différents. 352 Lorsque vous développez une application, sauf si vous développez directement sur le 353 serveur de production, vous avez besoin de plusieurs **environnements** : 354 355 * L'**environnement de développement** : C'est l'environnement utilisé par les **développeurs 356 Web** quand ils travaillent sur l'application pour ajouter de nouvelles fonctionnalités, corriger 357 des bugs, ... 358 * L'**environnement de test** : Cet environnement est utilisé pour tester automatiquement 359 l'application. 360 * L'**environnement de qualité** : Cet environnement est utilisé par le **client** 361 pour tester l'application et les bogues ou les fonctionnalités manquantes. 362 * L'**environnement de production** : C'est l'environnement où interagissent les 363 **utilisateurs finaux** 364 365 Qu'est ce qui rend un environnement unique ? Dans l'environnement de développement par exemple, 366 l'application doit se connecter à tous les détails d'une requête afin de faciliter 367 le débogage, mais le système de cache doit être désactivé de façon que tous les changements apportés 368 au code soient pris en compte sans tarder. Ainsi, l'environnement de développement 369 doit être optimisé pour le développeur. Le meilleur exemple est certainement lorsqu'une 370 ~exception|Exception~ se produit. Pour aider le développeur à déboguer le problème plus rapidement, symfony 371 affiche l'exception avec toutes les informations qu'elle a sur la requête 372 courante dans le navigateur : 373 374  375 376 Par contre sur l'environnement de production, la couche du cache doit être activé, et 377 bien entendu, l'application doit afficher les messages d'erreurs à la place des 378 exceptions. Ainsi, l'environnement de production doit être optimisé pour la performance 379 et l'expérience utilisateur. 380 381  382 383 Un environnement de symfony est un ensemble unique de paramètres de configuration. Le framework 384 symfony est livré avec trois d'entre eux : `dev`, `test`, et `prod`. Durant 385 la journée 22, vous apprendrez à créer de nouveaux environnements, comme celle de `staging`. 386 387 Si vous ouvrez les fichiers des contrôleurs frontaux, vous verrez que leur contenu est 388 le même, sauf pour la configuration de l'environnement : 400 389 401 390 [php] … … 405 394 require_once(dirname(__FILE__).'/../config/ProjectConfiguration.class.php'); 406 395 407 $configuration = 408 ➥ ProjectConfiguration::getApplicationConfiguration('frontend', 'prod', false); 396 $configuration = ProjectConfiguration::getApplicationConfiguration('frontend', 'prod', false); 409 397 sfContext::createInstance($configuration)->dispatch(); 410 398 411 399 >**NOTE** 412 > Définir un nouvel environnement dans symfony est aussi simple que de créer un413 > nouveau front controller. Nous verrons plus tard comment modifier les414 > paramètres pour unenvironnement.400 >La définition d'un nouvel environnement de symfony est aussi simple que la création d'un nouveau contrôleur 401 >frontal. Nous verrons plus tard comment modifier les paramètres d'un 402 >environnement. 415 403 416 404 Configuration du serveur web : la pire méthode 417 ------------------------------ ----------------405 ------------------------------ 418 406 419 407 Dans la section précédente, un répertoire a été créée pour héberger le projet … … 421 409 serveur, vous pouvez dès à présent y accéder par un navigateur. 422 410 423 Bien sûr comme cela vous n'avez rien à configurer, c'est très rapide à 424 installer, mais essayer d'accéder au ficher `config/databases.yml` à partir du 425 navigateur pour comprendre les mauvaises conséquences que peuvent avoir une 426 attitude de paresseux. 411 Bien sûr comme cela vous n'avez rien à configurer, c'est très rapide à installer, mais essayer 412 d'accéder au ficher `config/databases.yml` à partir de votre navigateur pour comprendre les 413 mauvaises conséquences que peuvent avoir une attitude de paresseux. Si l'utilisateur sait que votre 414 site est développé avec symfony, il aura accès à un grand nombre de fichiers 415 sensibles. 427 416 428 417 **Ne jamais utiliser cette installation sur un serveur de production** et lisez … … 430 419 431 420 Configuration du server web : la méthode sécurisée 432 -------------------------------- ------------------421 -------------------------------- 433 422 434 423 Une bonne pratique pour le web est de mettre seulement sous la racine web les … … 438 427 439 428 Si vous regardez ce répertoire, vous trouverez des sous-répertoires avec les 440 éléments cités ci-dessus et les deux fichiers de front controller. Les front441 controllerssont les seuls fichiers PHP qui doivent être sous la racine web.429 éléments cités ci-dessus et les deux fichiers des contrôleurs frontaux. Les contrôleurs 430 frontaux sont les seuls fichiers PHP qui doivent être sous la racine web. 442 431 Tous les autres fichiers PHP doivent être inaccessible par un navigateur, ce qui 443 432 est une bonne idée notamment pour la sécurité. … … 451 440 lignes à la fin : 452 441 453 # soyez certain de n'avoir cette ligne qu'une seule fois dans votre fichier442 # Soyez certain de n'avoir cette ligne qu'une seule fois dans votre fichier 454 443 NameVirtualHost 127.0.0.1:8080 455 444 … … 474 463 >**NOTE**: l'alias `/sf` vous donne accès aux images et fichiers Javascript 475 464 >nécessaires au bon affichage des pages par défaut de symfony et de la barre 476 >d'outils web de déb ugage ( web degug toolbar)477 > 478 >Pour windows, vous devez remplacer la ligne `Alias` avec quelque chose comme :465 >d'outils web de débogage (web debug toolbar) 466 > 467 >Pour Windows, vous devez remplacer la ligne `Alias` avec quelque chose comme : 479 468 > 480 469 > Alias /sf "c:\development\symfony\data\web\sf" … … 493 482 494 483 >**SIDEBAR** 495 >Configurer un nom de domainedédié à Jobeet496 > 497 > Si vous êtes l'administrateur de votre machine, c'est une meilleure pratique498 > que d'utiliser les virtual host à la place d'un nouveau port pour chaque499 > nouveau projet. Plutôt que d'utiliser un port et d'insérer une directive500 > `Listen`, choisissez un nom de domaine et ajouter une directive`ServerName` :484 >Configurer un ~nom de domaine~ dédié à Jobeet 485 > 486 >Si vous êtes un administrateur sur votre machine, il est préférable de configurer 487 >des ~serveurs virtuels|Serveurs Virtuels~ plutôt que d'ajouter un nouveau port à chaque fois que vous 488 >démarrez un nouveau projet. Au lieu de choisir un port et d'ajouter une déclaration `Listen`, choisissez 489 >un nom de domaine et ajoutez une instruction `ServerName` : 501 490 > 502 491 > # Configuration pour Jobeet … … 506 495 > </VirtualHost> 507 496 > 508 > Le nom de domaine `jobeet.localhost` doit être déclaré localement. Si vous509 > utilisez un système Linux, vous devez le faire dans le fichier `/etc/hosts`. 510 > Si vous utilisez Windows XP, ce fichier est situé dans le répertoire511 > `C:\WINDOWS\system32\drivers\etc\`.512 > 513 >Ajoutez ces lignes:497 >Le nom de domaine `jobeet.localhost` utilisé dans la configuration d'Apache doit être 498 déclaré localement. Si vous utilisez un système Linux, vous devez le faire dans le 499 >fichier `/etc/hosts`. Si vous utilisez Windows XP, ce fichier est situé dans le 500 >répertoire `C:\WINDOWS\system32\drivers\etc\`. 501 > 502 >Ajoutez la ligne suivante : 514 503 > 515 504 > 127.0.0.1 jobeet.localhost … … 522 511 que vous avez choisi dans les sections précédentes. 523 512 524  525 526 >**Note**: Si vous avez installé le module d'Apache `mod_rewrite` vous n'avez 527 >pas besoin d'utiliser /index.php/ dans les URLs. 513  514 515 >**Note**: Si vous avez installé le module d'Apache ~`mod_rewrite`|`mod_rewrite` (Apache)~ 516 >vous pouvez supprimer la partie `index.php/` dans l'URL. Ceci est 517 >possible grâce à la réécriture des règles configurées dans le 518 fichier `web/~.htaccess|.htaccess (Apache)~`. 528 519 529 520 Vous pouvez également essayer d'accéder à l'environnement de développement de … … 532 523 http://jobeet.localhost/frontend_dev.php/ 533 524 534 La barre d'outils web de débugage ( the web debug toolbar ) doit être présente 535 en haut dans le coin droit de votre navigateur, incluant de petites icônes. 536 C'est la preuve que votre alias de configuration `sf/` est correct. 537 538  525 La barre d'outils web de débogage doit être présente en haut dans le coin droit, incluant de petites 526 icônes. C'est la preuve que votre alias de configuration `sf/` est correct. 527 528  529 530 La ~barre d'outils web de débogage|Barre d'Outils Web de Débogage~ est présente sur toutes les pages dans 531 l'environnement de développement et vous donne accès à un grand nombre d'informations en cliquant 532 sur les différents onglets : la configuration de l'application actuelle, les journaux pour 533 la requête actuelle, les instructions SQL exécutées sur le moteur de la base de données, les informations 534 sur la mémoire et l'information du temps. 539 535 540 536 >**Note** 541 >L'installation est un petit peu différente si vous voulez exécuter symfony à 542 >partir d'un serveur IIS dans un environnement windows. Vous trouverez comment 543 >le configurer dans ce [tutorial](http://www.symfony-project.com/cookbook/1_0/web_server_iis). 544 545 Subversion 546 ---------- 547 548 C'est une bonne pratique d'utiliser un système de gestion de version de code 549 source lorsque vous développez une application web. Cela vous permet : 550 551 * travaillez en confiance 552 * retournez à une version précédente si un changement a cassé quelque chose 553 * à plus d'une personne de travaillez efficacement sur le projet 554 * d'accéder aux versions successives de l'application 555 556 Dans cette section nous décrivons comment utiliser 557 [Subversion](http://subversion.tigris.org/) avec symfony. Si vous utilisez un 558 autre outils que subversion, il sera facile d'adapter ce que nous décrivons pour 559 Subversion. 560 561 Nous supposons que vous avez déjà accès à un serveur Subversion. 537 >L'installation est un petit peu différente si vous voulez exécuter symfony à partir d'un serveur IIS 538 >dans un environnement Windows. Vous trouverez comment le configurer dans ce 539 >[tutoriel](http://www.symfony-project.com/cookbook/1_0/web_server_iis). 540 541 ~Subversion~ 542 ------------ 543 544 C'est une bonne pratique d'utiliser le contrôle de version des sources lors du développement 545 d'une application web. En utilisant un contrôle de version des sources, cela nous permet de : 546 547 * travailler en toute confiance 548 * revenir à une version précédente si un changement casse quelquechose 549 * permettre à plusieurs personnes de travailler efficacement sur le projet 550 * avoir accès à toutes les versions successives de l'application 551 552 Dans cette section, nous décrirons comment utiliser 553 [Subversion](http://subversion.tigris.org/) avec symfony. Si vous utilisez un autre 554 outil de contrôle de code source, il doit être assez facile d'adapter ce que nous décrivons 555 pour Subversion. 556 557 Nous supposons que vous avez déjà accès à un serveur Subversion et que vous pouvez y accéder 558 via HTTP. 562 559 563 560 >**TIP** 564 >Si vous n'avez pas de serveur Subversion à votre disposition, vous pouvez en 565 >créer un gratuitement sur [Google Code](http://code.google.com/hosting/) ou 566 >seulement chercher "free subversion repository" dans Google pour avoir plus de 567 >choix. 568 569 Premièrement créer un nouveau dépôt pour le projet `jobeet` : 570 571 $ svnadmin create http://svn.example.com/jobeet 572 $ svn mkdir -m "created default directory structure" 561 >Si vous ne disposez pas d'un serveur Subversion à votre disposition, vous pouvez créer un 562 >dépôt gratuit sur [Google Code](http://code.google.com/hosting/) ou 563 >tapez simplement "free subversion repository" dans Google pour avoir beaucoup plus d'options. 564 565 Tout d'abord, créer un dépôt pour le projet jobeet sur le serveur de dépôt : 566 567 $ svnadmin create /path/to/jobeet/repository 568 569 Sur votre machine, créez la structure de répertoires de base : 570 571 $ svn mkdir -m "creer la structure de repertoires par defaut" 573 572 ➥ http://svn.example.com/jobeet/trunk 574 573 ➥ http://svn.example.com/jobeet/tags 575 574 ➥ http://svn.example.com/jobeet/branches 576 575 577 Ensuite enlevez le contenu des répertoires `cache/` et `log/` car nous ne 578 voulons pas les insérer dans le dépôt. 576 Et faites un checkout du répertoire vide `trunk/` : 579 577 580 578 $ cd /home/sfprojects/jobeet 581 $ rm -rf cache/* 582 $ rm -rf log/* 583 584 Maintenant, appliquez les bons droits d'écritures aux répertoires cache et log 585 pour que votre serveur web puisse écrire dedans : 586 587 $ chmod 777 cache 588 $ chmod 777 log 589 590 Ensuite faites le premier import : 591 592 $ svn import -m "made the initial import" . 593 ➥ http://svn.example.com/jobeet/trunk 594 595 Comme nous ne voulons jamais commiter les fichiers situés dans les répertoires 596 `cache/` et `/log`, nous spécifions une liste 'ignore' : 579 $ svn co http://svn.example.com/jobeet/trunk/ . 580 581 Ensuite, supprimez le contenu des répertoires `cache/` et `log/` car nous ne 582 voulons pas les mettre dans le dépôt. 583 584 $ rm -rf cache/* log/* 585 586 Maintenant, assurez-vous de mettre les permissions d'écriture sur les répertoires du cache et des journaux 587 aux niveaux appropriés afin que votre serveur web puisse écrire dedans : 588 589 $ chmod 777 cache/ log/ 590 591 Maintenant, importer tous les fichiers et répertoires : 592 593 $ svn add * 594 595 Comme nous ne voudrons jamais faire de commit des fichiers situés dans les répertoires 596 `cache/` et `log/`, vous devez spécifier une liste à ignorer : 597 597 598 598 $ svn propedit svn:ignore cache 599 599 600 L'éditeur de texte par défaut pour SVN doit être lancé. Subversion doit ignorer601 tout le contenu de ce répertoire 600 L'éditeur de texte par défaut configuré dans SVN devrait se lancer. Subversion doit 601 ignorer tout le contenu de ce répertoire : 602 602 603 603 * 604 604 605 Sauve z et quitter. C'est fait.606 607 Faites la mêmeprocédure pour le répertoire `log/` :605 Sauvegardez et quittez. Vous avez terminé. 606 607 Répétez la procédure pour le répertoire `log/` : 608 608 609 609 $ svn propedit svn:ignore log 610 610 611 Et saisissez :611 Et entrez : 612 612 613 613 * 614 614 615 Pour finir, commiter les derniers changements au dépôt : 616 617 $ svn commit -m "added cache/ and log/ content in the ignore list" 615 Enfin, valider ces modifications dans le dépôt : 616 617 $ svn import -m "fait l import initial" . 618 ➥ http://svn.example.com/jobeet/trunk 618 619 619 620 >**Tip** 620 >Les utilisateurs windows peuvent utiliser le client 621 >[TortoiseSVN](http://tortoisesvn.tigris.org/) pour gérer leur dépôt subversion. 622 623 - 624 625 >**Note** 626 >Le dépôt Jobeet SVN sera public jour après jour. 627 > 628 >Donc, tant que le dépôt entier n'est pas public (`http://svn.jobeet.org/`), 629 >pour aujourd'hui le code a été commité et taggué. 630 > 631 >Vous pouvez faire un checkout de `release_day_01`: 632 > 633 > $ svn co http://svn.jobeet.org/tags/release_day_01/ jobeet/ 621 >Les utilisateurs de ~Windows~ peuvent utiliser l'excellent client [TortoiseSVN](http://tortoisesvn.tigris.org/) 622 pour gérer leur dépôt Subversion. 634 623 635 624 A demain … … 638 627 Bien, c'est fini pour aujourd'hui ! Même si nous n'avons pas encore parlé de 639 628 symfony, nous avons installé un environnement de développement solide, nous 640 avons parlé des bonnes pratiques de développement web, et nous sommes prêt à 641 coder. 642 643 Demain nous révélerons ce que l'application fait et nous naviguerons dans 644 symfony. Si vous voulez rester informé avec la dernière information sur Jobeet, 645 n'oubliez pas de souscrire au [symfony blog 646 feed](http://www.symfony-project.org/blog/). 647 648 649 Assurez-vous de revenir demain ! 629 avons parlé des bonnes pratiques de développement web, et nous sommes prêt à coder. 630 631 Demain nous révélerons ce que l'application fait et nous parlerons des 632 exigences que nous devons mettre en œuvre durant le tutoriel. 633 634 >**Note** 635 >Si vous souhaitez vérifier le code pour aujourd'hui, ou pour un autre jour, le code est 636 >disponible jour après jour dans le dépôt officiel SVN Jobeet 637 >(`http://svn.jobeet.org/##ORM_LOWER##/`). 638 > 639 >Par exemple, vous pouvez avoir le code d'aujourd'hui en cochant la 640 >balise `release_day_01` : 641 > 642 > $ svn co http://svn.jobeet.org/##ORM_LOWER##/tags/release_day_01/ jobeet/ 643 644 __ORM__