Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

Les deux révisions précédentes Révision précédente
Prochaine révision
Révision précédente
tutoriel:demarrer_un_projet_web_avec_symfony [Le 13/08/2009, 17:17]
Lami Ajout des deux lignes Pour activer le mode en lecture et écriture "mod_rewrite" d'Apache
tutoriel:demarrer_un_projet_web_avec_symfony [Le 11/09/2022, 12:23] (Version actuelle)
moths-art Suppression des espaces en fin de ligne (détecté et corrigé via le bot wiki-corrector (https://forum.ubuntu-fr.org/viewtopic.php?id=2067892)
Ligne 1: Ligne 1:
-{{tag>​tutoriel ​Symfony Version 1.2.8 programmation ​php mysql phpmyadmin apache ​BROUILLON}}+{{tag>​tutoriel ​vetuste ​programmation mysql phpmyadmin apache}} 
 + 
 +---- 
 +<note important>​Cette documentation est obsolète et contient des manipulations inutiles est risquées (modifications du fichier apache2.conf notamment).</​note>​
 ====== Démarrer un projet Web avec Symfony ====== ====== Démarrer un projet Web avec Symfony ======
 +<note important>​Avoir une la mis à jour PHP  ou au moins 7.2 v</​note>​
  
-Pour la première partie de ce tutoriel, c'est mon expérience de la mise en oeuvre ​du guide d'​installation de la page [[http://​doc.kubuntu-fr.org/​symfony|Symfony]] du présent site Web et de quelques autres trouvailles. Pour la seconde partie, ​ c'est mon expérience sous Kubuntu 9.04 de la mise en oeuvre ​du tutoriel de Symfony "​Jobeet"​ que l'on retrouve à l'​adresse Web : [[http://​www.symfony-project.org/​jobeet/​1_2/​Propel /fr/01 | Practical symfony Jour 1: Démarrage du projet]], de Fabien Potencier. ​+Pour la première partie de ce tutoriel, c'est mon expérience de la mise en œuvre ​du guide d'​installation de la page [[:​symfony|Symfony]] du présent site Web et de quelques autres trouvailles. Pour la seconde partie, ​ c'est mon expérience sous Kubuntu 9.04 de la mise en œuvre ​du tutoriel de Symfony "​Jobeet"​ que l'on retrouve à l'​adresse Web : [[http://​www.symfony-project.org/​jobeet/​1_2/​Propel /fr/01 | Practical symfony Jour 1: Démarrage du projet]], de Fabien Potencier. ​
  
-J'​aurais bien aimé trouver l'​équivalant ​du présent tutoriel (en français pour l'​installation et la production d'un premier site Web avec Symphony) lors de mes premières recherches de "​framework"​ il y à quatre mois, ou à mes débuts avec Symfony, il y a une semaine ! Je suis nouveau en ce domaine, vous le comprendrez ! Avec Apache, MySQL, PHP, framework MVC et compagnie, ça fait de gros morceau ​à avaler pour moi, mais pas pour ce qui touche à la programmation objet et en html !+J'​aurais bien aimé trouver l’équivalent ​du présent tutoriel (en français pour l'​installation et la production d'un premier site Web avec Symfony) lors de mes premières recherches de "​framework"​ il y à quatre mois, ou à mes débuts avec Symfony, il y a une semaine ! Je suis nouveau en ce domaine, vous le comprendrez ! Avec Apache, MySQL, PHP, framework MVC et compagnie, ça fait de gros morceaux ​à avaler pour moi, mais pas pour ce qui touche à la programmation-objet et en html !
  
 Comme je souhaitais produire un modèle générique de base pour mes propres besoins éventuels, j'ai adapté les exemples du tutoriel pour un projet générique que je nomme Projet01. Cela m'a poussé à toujours bien comprendre les étapes, procédures et commandes, pour que le tout soit cohérent et bien sûr fonctionnel pour mes futurs projets. Je ne suis pas certain d'​avoir tout bien réussi, mais pour moi cela est suffisamment potable pour être mise en ligne. Cette expérience sera probablement utile à d'​autres. C'est ce que je souhaite ! Comme je souhaitais produire un modèle générique de base pour mes propres besoins éventuels, j'ai adapté les exemples du tutoriel pour un projet générique que je nomme Projet01. Cela m'a poussé à toujours bien comprendre les étapes, procédures et commandes, pour que le tout soit cohérent et bien sûr fonctionnel pour mes futurs projets. Je ne suis pas certain d'​avoir tout bien réussi, mais pour moi cela est suffisamment potable pour être mise en ligne. Cette expérience sera probablement utile à d'​autres. C'est ce que je souhaite !
  
 Bon concert ! Bon concert !
 +
  
 ===== Introduction ===== ===== Introduction =====
Ligne 22: Ligne 27:
 ==== Installer un serveur Apache ==== ==== Installer un serveur Apache ====
  
-Installer les paquets pour le serveur Apache avec la commande suivante dans un terminal ​: +[[:tutoriel:​comment_installer_un_paquet|Installez]] [[apt://apache2,apache2-doc| Apache et sa documentation]].
- +
-  sudo aptitude install ​apache2 apache2-doc +
- +
-Si un mot de passe est demandé, entrer votre mot de passe d'​utilisateur.+
  
 Vérification du fonctionnement d'​Apache en ouvrant votre navigateur internet à l'​adresse Web suivante : Vérification du fonctionnement d'​Apache en ouvrant votre navigateur internet à l'​adresse Web suivante :
Ligne 44: Ligne 45:
 ==== Installer MySQL ==== ==== Installer MySQL ====
  
-Installation des paquets pour le serveur de base de données MySQL avec la commande suivante dans un terminal : +[[:​tutoriel:​comment_installer_un_paquet|Installez]] [[apt://​mysql-server|le serveur de base de données MySQL]].
- +
-  sudo aptitude install mysql-server+
  
 À la fin de l'​installation,​ une fenêtre vous demande de choisir le mot de passe pour l'​utilisateur root de MySQL. À la fin de l'​installation,​ une fenêtre vous demande de choisir le mot de passe pour l'​utilisateur root de MySQL.
Ligne 54: Ligne 53:
 Enregistrer ce nouveau mot de passe pour ce nouveau compte "MySQL Root" pour le retrouver au besoin. Enregistrer ce nouveau mot de passe pour ce nouveau compte "MySQL Root" pour le retrouver au besoin.
  
-Si cela n'est pas déjà dans votre habitude, je vous recommande d'enregistre ​tous vos mots de passe dans un fichier Writer d'​OpenOffice et d'​enregistrer ce fichier avec un mot de passe. Pour se faire, dans OpenOffice, menu Fichier -> Enregistrer sous..., cocher la boîte "​Enregistrer avec mot de passe"​.+Si cela n'est pas déjà dans votre habitude, je vous recommande d'enregistrer ​tous vos mots de passe dans un fichier Writer d'​OpenOffice et d'​enregistrer ce fichier avec un mot de passe. Pour se faire, dans OpenOffice, menu Fichier -> Enregistrer sous..., cocher la boîte "​Enregistrer avec mot de passe"​.
  
 Par exemple, pour le mot de passe de "MySQL Root", j'ai les lignes suivantes dans mon fichier Par exemple, pour le mot de passe de "MySQL Root", j'ai les lignes suivantes dans mon fichier
Ligne 64: Ligne 63:
 ==== Installer PHP ==== ==== Installer PHP ====
  
-Installation des paquets pour la programmation en PHP5 : +[[:tutoriel:​comment_installer_un_paquet|Installez]] [[apt://php5,libapache2-mod-php5,php5-mysql|divers paquets pour la programmation en PHP5]].
- +
-  sudo aptitude install ​php5 libapache2-mod-php5 php5-mysql+
  
 Éditer le fichier apache2.conf pour y ajouter le nom (adresse) du serveur : Éditer le fichier apache2.conf pour y ajouter le nom (adresse) du serveur :
Ligne 199: Ligne 196:
 ATTENTION : Pendant l'​installation de PhpMyAdmin, il vous sera demandé de choisir le serveur Web à configurer. Choisissez avec les touches Flèche vers le haut et Flèche vers le bas la ligne "​apache2"​ et appuyant sur la barre d'​espacement la sélectionné cette entrée. ATTENTION : Pendant l'​installation de PhpMyAdmin, il vous sera demandé de choisir le serveur Web à configurer. Choisissez avec les touches Flèche vers le haut et Flèche vers le bas la ligne "​apache2"​ et appuyant sur la barre d'​espacement la sélectionné cette entrée.
  
-Installez ​le paquet PhpMyAdmin : +[[:​tutoriel:​comment_installer_un_paquet|Installez]] [[apt://​PhpMyAdmin|PhpMyAdmin]].
- +
-  sudo aptitude install phpmyadmin+
  
 Pour vérifier le bon fonctionnement de PhpMyAdmin, rendez-vous à l'URL : Pour vérifier le bon fonctionnement de PhpMyAdmin, rendez-vous à l'URL :
  
   http://​localhost/​phpmyadmin/​   http://​localhost/​phpmyadmin/​
 +  ​
 +si vous tombez sur une page (not found), Tapez la command
 +
 +  sudo kate /​etc/​apache2/​apache2.conf ​
 +
 +et ajoutez à la fin un nouveau ligne
 + 
 +  Include /​etc/​phpmyadmin/​apache.conf
 + 
  
 Vous arriverez alors sur la page d'​authentification de PhpMyAdmin. Entrez alors votre non de compte qui est Vous arriverez alors sur la page d'​authentification de PhpMyAdmin. Entrez alors votre non de compte qui est
Ligne 215: Ligne 219:
 Remarque : si votre compte est dupont ne pas mettre dupont comme utilisateur,​ mais "​root"​ puis le mot de passe sinon vous risquez d'​avoir l'​erreur #1045 - Access denied for user '​root'​@'​localhost'​ en tentant d'​accéder à vos bases de données. Remarque : si votre compte est dupont ne pas mettre dupont comme utilisateur,​ mais "​root"​ puis le mot de passe sinon vous risquez d'​avoir l'​erreur #1045 - Access denied for user '​root'​@'​localhost'​ en tentant d'​accéder à vos bases de données.
  
-Si tout s'est bien passé, vous devriez être connecté à PhpMyAdmin et pouvoir créer et gérer vos bases de données. +Si tout s'est bien passé, vous devriez être connecté à PhpMyAdmin et pouvoir créer et gérer vos bases de données. 
 +- Si vous arrivez pas à vous connecter à PhpMyAdmin il faut créer un lien symbolique vers MyPhpAdmin, il faut juste faire la commande suivante: " sudo ln -s /​usr/​share/​phpmyadmin /​var/​www/​phpmyadmin "
 Il existe déjà deux bases de données, n'y touchez pas. Elles servent au bon fonctionnement de MySQL. Il existe déjà deux bases de données, n'y touchez pas. Elles servent au bon fonctionnement de MySQL.
  
Ligne 256: Ligne 260:
 ==== Installer Symfony ==== ==== Installer Symfony ====
  
-Installation ​des paquets et dépendances pour le cadre de travail "​framework"​ Symfony+[[:​tutoriel:​comment_installer_un_paquet|Installez]] [[apt://​php5-symfony,​php-pear,​php5-cli php5-xsl|des paquets et dépendances pour le cadre de travail "​framework"​ Symfony]].
  
-Pour le PHP, dans un terminal, entrer la commande : +Pour configurer Symfony avec PEAR, entrer les commandes :​
- +
-  sudo aptitude install php5-symfony php-pear php5-cli php5-xsl +
- +
-pour installer et configurer Symfony avec PEAR, entrer les commandes :​+
  
   sudo pear channel-discover pear.symfony-project.com   sudo pear channel-discover pear.symfony-project.com
Ligne 268: Ligne 268:
   sudo pear install symfony/​symfony   sudo pear install symfony/​symfony
  
-Si tout sest bien passé, vous aurez le message suivant :+Si tout s'est bien passé, vous aurez le message suivant :
  
-  install ok: channel://​pear.symfony-project.com/​symfony-1.2.8+  install ok: channel://​pear.symfony-project.com/​symfony-1.x.
 +   
 +Tapez cette comand dans le terminal : 
 + 
 +  sudo pear install --alldeps http://​phing.info/​pear/​phing-current.tgz ​
  
 Nous avons un premier niveau d'aide pour Symfony avec la commande suivante : Nous avons un premier niveau d'aide pour Symfony avec la commande suivante :
Ligne 283: Ligne 287:
  
 ===== Installer un nouveau projet ===== ===== Installer un nouveau projet =====
- 
  
 ==== Préambule ==== ==== Préambule ====
  
 Pour notre exemple, nous créons le projet "​projet01",​ dans le dossier "​projet01"​ de votre dossier utilisateur principal (/​home/​votre_nom_d'​utilisateur/​projet01). Pour notre exemple, nous créons le projet "​projet01",​ dans le dossier "​projet01"​ de votre dossier utilisateur principal (/​home/​votre_nom_d'​utilisateur/​projet01).
 +
 +  sudo mkdir /​home/​votre_nom_d'​utilisateur/​projet01
  
 Chez moi, cela pourrait donner comme chemin de dossier ce qui suit : Chez moi, cela pourrait donner comme chemin de dossier ce qui suit :
Ligne 293: Ligne 298:
   /​home/​rene/​projet01   /​home/​rene/​projet01
  
-Créer dès maintenant le dossier du projet01 avec la commande suivante dans un terminal : 
- 
-  mkdir projet01 
  
 Si vous procédez différemment,​ vous prendrez soin d'​adapter tout ce qui suit avec votre propre chemin de dossier. Si vous procédez différemment,​ vous prendrez soin d'​adapter tout ce qui suit avec votre propre chemin de dossier.
Ligne 315: Ligne 317:
 === Création du serveur virtuel === === Création du serveur virtuel ===
  
-Créez un nouveau fichier "​projet01"​ pour le serveur virtuel Apache avec la commende ​suivante dans un terminal :+Créez un nouveau fichier "​projet01"​ pour le serveur virtuel Apache avec la commande ​suivante dans un terminal :
  
   sudo kate /​etc/​apache2/​sites-available/​projet01   sudo kate /​etc/​apache2/​sites-available/​projet01
Ligne 338: Ligne 340:
 </​VirtualHost>​ </​VirtualHost>​
 </​code>​ </​code>​
 + 
 Activons ce nouveau domaine avec la commande suivante dans un terminal : Activons ce nouveau domaine avec la commande suivante dans un terminal :
  
   sudo a2ensite projet01   sudo a2ensite projet01
 +   
 +  ​
 Pour que ces changements soient pris en compte, il faut relancer le serveur Apache avec la commande suivante : Pour que ces changements soient pris en compte, il faut relancer le serveur Apache avec la commande suivante :
  
   sudo /​etc/​init.d/​apache2 restart   sudo /​etc/​init.d/​apache2 restart
  
-Entrez ​son adresse Web du nouveau projet dans votre navigateur préféré :​+Entrez ​l'adresse Web du nouveau projet dans votre navigateur préféré :​
  
   dev.projet01.com   dev.projet01.com
Ligne 359: Ligne 362:
 Créons maintenant le canevas de base avec Symfony avec la commande suivante dans le terminal : Créons maintenant le canevas de base avec Symfony avec la commande suivante dans le terminal :
  
-  symfony generate:​project projet01+  ​sudo symfony generate:​project projet01 ​--orm=Propel 
 +  
 +Si vous avez un message d'​avertissement pensez à avoir les droits (sudo) car symfony ne dit toujours qu'il faut avoir les permissions
  
 Cette commande génère la structure par défaut des répertoires et crée les fichiers nécessaires d'un projet symfony. Cette commande génère la structure par défaut des répertoires et crée les fichiers nécessaires d'un projet symfony.
Ligne 378: Ligne 383:
  
 === Création d'​application === === Création d'​application ===
 +
 +D’abord assurez vous que vous situés sous le répertoire projet symfone, dans notre cas projet01 :
 +
 +  cd /​home/​nomVotrePC/​projet01
  
 Créons l'​application frontend en exécutant la commande suivante : Créons l'​application frontend en exécutant la commande suivante :
-  symfony generate:​app --escaping-strategy=on --csrf-secret=Unique$ecret frontend+  ​sudo symfony generate:​app --escaping-strategy=on --csrf-secret=Unique$ecret frontend
  
 Cette commande crée la structure par défaut des répertoires de l'​application dans le dossier apps/​frontend. Cette commande crée la structure par défaut des répertoires de l'​application dans le dossier apps/​frontend.
Ligne 482: Ligne 491:
 Pour indiquer à Symfony la base de données que nous utilisons pour le projet, entrons la commande suivante <B>en prenant soin de modifier la commande. Si votre nom d'​utilisateur MySQLAdmin est "​1111"​ et que votre mot de passe MySQLAdmin est "​22222222"</​B>​ la commande sera : Pour indiquer à Symfony la base de données que nous utilisons pour le projet, entrons la commande suivante <B>en prenant soin de modifier la commande. Si votre nom d'​utilisateur MySQLAdmin est "​1111"​ et que votre mot de passe MySQLAdmin est "​22222222"</​B>​ la commande sera :
  
-  symfony configure:​database "​mysql:​host=localhost;​dbname=projet01"​ 1111 22222222+  ​sudo symfony configure:​database "​mysql:​host=localhost;​dbname=projet01"​ 1111 22222222
  
 Avec la description de la base de données dans le fichier schema.yml, nous pouvons utiliser les tâches intégrées de l'ORM pour générer les déclarations SQL nécessaires pour créer des tables : Avec la description de la base de données dans le fichier schema.yml, nous pouvons utiliser les tâches intégrées de l'ORM pour générer les déclarations SQL nécessaires pour créer des tables :
Ligne 794: Ligne 803:
   http://​dev.projet01.com/​frontend_dev.php/​job   http://​dev.projet01.com/​frontend_dev.php/​job
  
-===== Liens utiles ​=====+===== Principes de configuration dans Symfony ​=====
  
-[[http://trac.symfony-project.org/wiki/Resources/fr_FR|Symfony ​- Ressources symfony en français]]+Par défaut, la tâche generate:project a créé trois dossier pour le projet courant : web/imagespour les images, web/csspour les feuilles de style, et web/js/ pour les fichiers Javascript. Ceci fait partie des nombreuses conventions définies par Symfony, mais vous pouvez évidemment les placer dans un autre dossier sous le répertoire web/, mais cela n'est pas recommandé.
  
-[[http://​doc.kubuntu-fr.org/​symfony|Kubuntu-fr.org Symfony]]+Bien que le fichier main.css n'est défini nul part dans le layout par défaut, il est nécessairement présent dans le code HTML généréMais pas les autresComment est-ce possible ?
  
-[[http://​www.sensiolabs.com/​blog/​|Symfony - Le blog]]+==== Les helper ====
  
-==== Les tutoriels ====+La feuille de style a été inclue grâce à la fonction include_stylesheets() située entre les balises <​head>​ du fichier layout. La fonction include_stylesheets() est appelée un helper. Un helper est une fonction, définie par symfony, pouvant prendre des paramètres et renvoyant du code HTML. La plupart du temps, les helpers permettent de gagner du temps, ils contiennent du code fréquemment utilisé dans les templates. Ici, le helper include_stylesheets() génère une balise <​link>​ spécifique aux feuilles de style.
  
-[[http://​www.symfony-project.org/​jobeet/​1_2/​Propel /fr/01 | Symfony-project.org - Le projet Jobeet]]+Mais comment le helper sait quelle feuille de style inclure ?
  
-[[http://​www.symfony-project.org/​cookbook/​1_2/​fr/​ | Symfony-project.org - Symfony ​le Cookbook]]+La couche vue peut être paramétrée en éditant le fichier de configuration view.yml de l'​applicationVoici le fichier par défaut généré lors de l'​appel à la tâche generate:​app
  
-[[http://www.symfony-project.org/forms/​1_2/​fr/​ | Symfony-project.org - Symfony le Forms en Action]]+<​code>​ 
 +# apps/frontend/config/view.yml 
 +default: 
 +  http_metas:​ 
 +    content-type: text/html 
 +  
 +  metas: 
 +    #​title: ​       symfony ​project 
 +    #​description: ​ symfony project 
 +    #​keywords: ​    ​symfony,​ project 
 +    #​language: ​    en 
 +    #​robots: ​      ​index,​ follow 
 +  
 +  stylesheets: ​   [main.css] 
 +  
 +  javascripts: ​   [] 
 +  
 +  has_layout: ​    on 
 +  layout: ​        ​layout 
 +</​code>​
  
-[[http://​www.lafermeduweb.net/​tutorial/​demarrer-un-projet-avec-symfony-p27.html|La Ferme du Web - Démarrer un projet avec Symfony]]+Le fichier view.yml contient les paramètres par défaut (default) pour tous les templates de l'​applicationPar exemple, l'​entrée `stylesheets'​ définit ​un tableau de fichiers de feuilles de style à inclure pour toutes les pages de l'​application (ceci grâce au helper vu ci-dessus).
  
-[[http://​www.glagla.org/​weblog/​2008/​06/​19/​configuration-svn-pour-un-projet-symfony/​|Glagla Dot Org - +Dans le fichier de configuration par défaut view.yml, le fichier référence est main.css, et non pas css/​main.css. En fait, les deux définitions sont équivalentes. Symfony préfixe les chemin relatifs avec /css/. 
 + 
 +Si plusieurs fichiers sont définis, Symfony les inclura dans le même ordre que celui dans lequel ils ont été définis : 
 + 
 +  stylesheets: ​   [main.css, jobs.css, job.css] 
 + 
 +Vous pouvez également définir l'​attribut media et omettre le suffixe .css : 
 + 
 +  stylesheets: ​   [main.css, jobs.css, job.css, print: { media: print }] 
 + 
 +Cette configuration génèrera le code suivant : 
 + 
 +  <link rel="​stylesheet"​ type="​text/​css"​ media="​screen"​ href="/​css/​main.css"​ /> 
 +  <link rel="​stylesheet"​ type="​text/​css"​ media="​screen"​ href="/​css/​jobs.css"​ /> 
 +  <link rel="​stylesheet"​ type="​text/​css"​ media="​screen"​ href="/​css/​job.css"​ /> 
 +  <link rel="​stylesheet"​ type="​text/​css"​ media="​print"​ href="/​css/​print.css"​ /> 
 + 
 +Le fichier de configuration view.yml définit également le layout utilisé par défaut pour l'​application. Par défaut, son nom est layout. Par conséquent,​ Symfony met en page chacune de vos pages à partir du fichier layout.php. Vous pouvez également désactiver cette mise en page en définissant l'​entrée has_layout à false. 
 + 
 +Tel quel, le site répond à nos attentes. Le fichier jobs.css est uniquement utile pour la page d'​accueil,​ et le fichier job.css uniquement pour la page job. Il peut-être intéressant de faire en sorte que chaque fichier ne soit inclu que lorsqu'​il est utile. Le fichier de configuration view.yml peut résoudre ce problème en le personnalisant par module. 
 + 
 +Sous les sections indexSuccess et showSuccess (qui sont les noms des templates associés aux actions index et show, comme nous le verrons plus tard), vous pouvez personnaliser les entrées se trouvant sous la section default du fichier view.yml de l'​application. Toutes les entrées spécifiques sont fusionnées avec celles de l'​application. Vous pouvez également définir des paramètres pour toutes les actions d'un module avec la section spéciale all. 
 + 
 +Pour beaucoup de fichiers de configuration de Symfony, un même paramètre peut être définit à différents niveaux : 
 + 
 +- Au niveau du framework lui-même 
 +- Au niveau du projet (dans le répertoire config/) 
 +- A un niveau plus local, celui de l'​application (dans le répertoire apps/​APP/​config/​) 
 +- Au niveau restreint au module (dans le répertoire apps/​APP/​modules/​MODULE/​config/​) 
 + 
 +Lors de l'​exécution,​ le système de configuration fusionne tous les paramètres depuis les différents fichiers si ils existent et les met en cache pour de meilleurs performances. 
 + 
 +En règle générale, quand quelque chose est configurable via un fichier de configuration,​ la même chose peut être faite avec du code PHP. Au lieu de créer un fichier view.yml pour le module job par exemple, vous pouvez aussi utiliser le helper use_stylesheet() pour inclure une feuille de style depuis un template avec par exemple la ligne : 
 + 
 +  <?php use_stylesheet('​main.css'​) ?> 
 + 
 +Vous pouvez également utiliser ce helper dans le layout pour inclure une feuille de style globale à l'​application. 
 + 
 +Le choix entre une méthode ou l'​autre est réellement une question de goût. Le fichier view.yml permet de définir quelque chose pour toutes les actions d'un module, ce qui n'est pas possible depuis un template. Cela dit, la configuration est plus statique. A l'​inverse,​ le helper use_stylesheet() est plus flexible et plus encore, tout se trouve au même endroit : la définition des feuilles de style et le code HTML. Pour Projet01, nous allons utiliser le helper use_stylesheet(),​ et mettre à jour le template job avec les appels à use_stylesheet(). 
 + 
 +De la même manière, la configuration JavaScript est faite via l'​entrée javascripts du fichier de configuration view.yml ou via le helper use_javascript() permettant d'​inclure des fichiers JavaScript dans un template. 
 + 
 +La page d'​accueil Job 
 + 
 +Comme déjà vu, la page d'​accueil est générée par l'​action index du module job. L'​action index fait partie de la couche Contrôleur de la page et le template associé, indexSuccess.php,​ fait parti de la couche Vue : 
 + 
 +<​code>​ 
 +apps/ 
 +  frontend/ 
 +    modules/ 
 +      job/ 
 +        actions/ 
 +          actions.class.php 
 +        templates/​ 
 +          indexSuccess.php 
 +</​code>​ 
 + 
 +==== L'​action ==== 
 + 
 +Chaque action est représentée par une méthode de classe. Pour la page d'​accueil de job, la classe est jobActions (le nom du module avec le suffixe Actions) et la méthode est executeIndex() (le nom de l'​action avec le préfixe execute). Dans notre cas, cela renvoie tous les jobs de la BDD : 
 + 
 + 
 +<​code>​ 
 +// apps/​frontend/​modules/​job/​actions/​actions.class.php 
 +class jobActions extends sfActions 
 +
 +  public function executeIndex(sfWebRequest $request) 
 +  { 
 +    $this->​projet01_job_list = Projet01JobPeer::​doSelect(new Criteria());​ 
 +  } 
 +  
 +  // ... 
 +
 +</​code>​ 
 + 
 +Analysons de plus près le code : la méthode executeIndex() (couche Contrôleur) appelle la (couche) Modèle Projet01JobPeer pour renvoyer tous les jobs (new Criteria()). Le modèle renvoie un tableau d'​objet de type Projet01Job que l'on affecte à la propriété projet01_job_list de l'​objet courant. 
 + 
 +Toutes les propriétés des objets sont automatiquement passées au template (la couche Vue). Pour transmettre des données du Contrôleur à la Vue, il vous suffit simplement de créer une nouvelle propriété : 
 + 
 +<​code>​ 
 +public function executeFooBar(sfWebRequest $request) 
 +
 +  $this->​foo = '​bar';​ 
 +  $this->​bar = array('​bar',​ '​baz'​);​ 
 +
 +</​code>​ 
 + 
 +Cette méthode rendra les variables $foo et $bar accessibles depuis le template. 
 +Le Template 
 + 
 +Par défaut, le nom du template associé à l'​action est déduit par symfony : le nom de l'​action avec le suffixe Success. 
 + 
 +Le template indexSuccess.php génère une table HTML pour tous les jobs : 
 + 
 +<​code>​ 
 +<!-- apps/​frontend/​modules/​job/​templates/​indexSuccess.php --> 
 +<​h1>​Job List</​h1>​ 
 +  
 +<​table>​ 
 +  <​thead>​ 
 +    <​tr>​ 
 +      <​th>​Id</​th>​ 
 +      <​th>​Category</​th>​ 
 +      <​th>​Type</​th>​ 
 +<!-- more columns here --> 
 +      <​th>​Created at</​th>​ 
 +      <​th>​Updated at</​th>​ 
 +    </​tr>​ 
 +  </​thead>​ 
 +  <​tbody>​ 
 +    <?php foreach ($projet01_job_list as $projet01_job):​ ?> 
 +    <​tr>​ 
 +      <​td>​ 
 +        <a href="<?​php echo url_for('​job/​show?​id='​.$projet01_job->​getId()) ?>">​ 
 +          <?php echo $projet01_job->​getId() ?> 
 +        </​a>​ 
 +      </​td>​ 
 +      <​td><?​php echo $projet01_job->​getCategoryId() ?></​td>​ 
 +      <​td><?​php echo $projet01_job->​getType() ?></​td>​ 
 +<!-- more columns here --> 
 +      <​td><?​php echo $projet01_job->​getCreatedAt() ?></​td>​ 
 +      <​td><?​php echo $projet01_job->​getUpdatedAt() ?></​td>​ 
 +    </​tr>​ 
 +    <?php endforeach; ?> 
 +  </​tbody>​ 
 +</​table>​ 
 +  
 +<a href="<?​php echo url_for('​job/​new'​) ?>">​New</​a>​ 
 +</​code>​ 
 + 
 +Dans ce code, la boucle foreach parcourt la liste d'​objets job ($projet01_job_list) et, pour chaque job, chaque colonne est affichée. 
 + 
 +Souvenez-vous,​ pour accéder à la valeur d'une colonne (propriété),​ il suffit simplement de faire appel à un accesseur. Comme d'​habitude,​ le nom de ces accesseurs suit une convention établit par Symfony : chaque accesseur commence par le préfixe get suivit du nom de la colonne (propriété) en camelCased (par exemple, la méthode getCreatedAt() permet d'​accéder à la valeur de la colonne created_at de l'​objet). 
 + 
 +Faisons un peu de tri dans tout ça afin de n'​afficher qu'une partie des propriétés : 
 + 
 +<​code>​ 
 +<!-- apps/​frontend/​modules/​job/​templates/​indexSuccess.php --> 
 +<?php use_stylesheet('​jobs.css'​) ?> 
 +  
 +<div id="​jobs">​ 
 +  <table class="​jobs">​ 
 +    <?php foreach ($projet01_job_list as $i => $job): ?> 
 +      <tr class="<?​php echo fmod($i, 2) ? '​even'​ : '​odd'​ ?>">​ 
 +        <td class="​location"><?​php echo $job->​getLocation() ?></​td>​ 
 +        <td class="​position">​ 
 +          <a href="<?​php echo url_for('​job/​show?​id='​.$job->​getId()) ?>">​ 
 +            <?php echo $job->​getPosition() ?> 
 +          </​a>​ 
 +        </​td>​ 
 +        <td class="​company"><?​php echo $job->​getCompany() ?></​td>​ 
 +      </​tr>​ 
 +    <?php endforeach; ?> 
 +  </​table>​ 
 +</​div>​ 
 +</​code>​ 
 + 
 +La fonction url_for() utilisée dans ce template est un helper Symfony. 
 + 
 +=== Le template de la page d'un job === 
 + 
 +Personnalisons maintenant le template de la page d'un job. Ouvrez le fichier showSuccess.php avec la commande 
 + 
 +  kate apps/​frontend/​modules/​job/​templates/​showSuccess.php 
 + 
 +Remplacez son contenu par le code suivant : 
 + 
 +<​code>​ 
 +<?php use_stylesheet('​job.css'​) ?> 
 +<?php use_helper('​Text'​) ?> 
 +  
 +<div id="​job">​ 
 +  <​h1><?​php echo $job->​getCompany() ?></​h1>​ 
 +  <​h2><?​php echo $job->​getLocation() ?></​h2>​ 
 +  <​h3>​ 
 +    <?php echo $job->​getPosition() ?> 
 +    <​small>​ - <?php echo $job->​getType() ?></​small>​ 
 +  </​h3>​ 
 +  
 +  <?php if ($job->​getLogo()):​ ?> 
 +    <div class="​logo">​ 
 +      <a href="<?​php echo $job->​getUrl() ?>">​ 
 +        <img src="/​uploads/​jobs/<?​php echo $job->​getLogo() ?>"​ 
 +          alt="<?​php echo $job->​getCompany() ?> logo" /> 
 +      </​a>​ 
 +    </​div>​ 
 +  <?php endif; ?> 
 +  
 +  <div class="​description">​ 
 +    <?php echo simple_format_text($job->​getDescription()) ?> 
 +  </​div>​ 
 +  
 +  <​h4>​How to apply?</​h4>​ 
 +  
 +  <p class="​how_to_apply"><?​php echo $job->​getHowToApply() ?></​p>​ 
 +  
 +  <div class="​meta">​ 
 +    <​small>​posted on <?php echo $job->​getCreatedAt('​m/​d/​Y'​) ?></​small>​ 
 +  </​div>​ 
 +  
 +  <div style="​padding:​ 20px 0">​ 
 +    <a href="<?​php echo url_for('​job/​edit?​id='​.$job->​getId()) ?>">​Edit</​a>​ 
 +  </​div>​ 
 +</​div>​ 
 +</​code>​ 
 + 
 +Ce template utilise la variable $job passée en paramètre par l'​action servant à afficher les informations sur un job. Comme nous avons renommé la variable utilisée dans le template ($job au lieu de $projet01_job),​ vous devez également modifier le nom de la variable envoyée au template depuis l'​action show (attention, elle s'y trouve deux fois). Remplacez le contenu par : 
 + 
 +<​code>​ 
 +<?php 
 + 
 +/** 
 + * job actions. 
 + * 
 + * @package ​   projet01 
 + * @subpackage job 
 + * @author ​    Your name here 
 + * @version ​   SVN: $Id: actions.class.php 12474 2008-10-31 10:41:27Z fabien $ 
 + */ 
 +class jobActions extends sfActions 
 +
 +  public function executeIndex(sfWebRequest $request) 
 +  { 
 +    $this->​projet01_job_list = Projet01JobPeer::​doSelect(new Criteria());​ 
 +  } 
 + 
 +  public function executeShow(sfWebRequest $request) 
 +  { 
 +    $this->​job = Projet01JobPeer::​retrieveByPk($request->​getParameter('​id'​));​ 
 +    $this->​forward404Unless($this->​job);​ 
 +  } 
 + 
 +  public function executeNew(sfWebRequest $request) 
 +  { 
 +    $this->​form = new Projet01JobForm();​ 
 +  } 
 + 
 +  public function executeCreate(sfWebRequest $request) 
 +  { 
 +    $this->​forward404Unless($request->​isMethod('​post'​));​ 
 + 
 +    $this->​form = new Projet01JobForm();​ 
 + 
 +    $this->​processForm($request,​ $this->​form);​ 
 + 
 +    $this->​setTemplate('​new'​);​ 
 +  } 
 + 
 +  public function executeEdit(sfWebRequest $request) 
 +  { 
 +    $this->​forward404Unless($projet01_job = Projet01JobPeer::​retrieveByPk($request->​getParameter('​id'​)),​ sprintf('​Object projet01_job does not exist (%s).',​ $request->​getParameter('​id'​)));​ 
 +    $this->​form = new Projet01JobForm($projet01_job);​ 
 +  } 
 + 
 +  public function executeUpdate(sfWebRequest $request) 
 +  { 
 +    $this->​forward404Unless($request->​isMethod('​post'​) || $request->​isMethod('​put'​));​ 
 +    $this->​forward404Unless($projet01_job = Projet01JobPeer::​retrieveByPk($request->​getParameter('​id'​)),​ sprintf('​Object projet01_job does not exist (%s).',​ $request->​getParameter('​id'​)));​ 
 +    $this->​form = new Projet01JobForm($projet01_job);​ 
 + 
 +    $this->​processForm($request,​ $this->​form);​ 
 + 
 +    $this->​setTemplate('​edit'​);​ 
 +  } 
 + 
 +  public function executeDelete(sfWebRequest $request) 
 +  { 
 +    $request->​checkCSRFProtection();​ 
 + 
 +    $this->​forward404Unless($projet01_job = Projet01JobPeer::​retrieveByPk($request->​getParameter('​id'​)),​ sprintf('​Object projet01_job does not exist (%s).',​ $request->​getParameter('​id'​)));​ 
 +    $projet01_job->​delete();​ 
 + 
 +    $this->​redirect('​job/​index'​);​ 
 +  } 
 + 
 +  protected function processForm(sfWebRequest $request, sfForm $form) 
 +  { 
 +    $form->​bind($request->​getParameter($form->​getName()),​ $request->​getFiles($form->​getName()));​ 
 +    if ($form->​isValid()) 
 +    { 
 +      $projet01_job = $form->​save();​ 
 + 
 +      $this->​redirect('​job/​edit?​id='​.$projet01_job->​getId());​ 
 +    } 
 +  } 
 +
 +</​code>​ 
 + 
 +Remarquez que certains accesseurs Propel prennent des paramètres. Comme nous avons défini la colonne created_at de type timestamp, l'​accesseur getCreatedAt() prend en paramètre le format de la date à renvoyer : 
 + 
 +  $job->​getCreatedAt('​m/​d/​Y'​);​ 
 + 
 +La description d'un job utilise le helper simple_format_text() afin de formater le texte en HTML, en remplaçant notamment les retours chariots par des balises <br />. Comme ce helper fait parti du groupe Text et que celui-ci n'est pas chargé par défaut, nous le chargeons manuellement en utilisant le helper use_helper(). 
 + 
 + 
 +===== Liens utiles ===== 
 + 
 +  * [[http://​trac.symfony-project.org/​wiki/​Resources/​fr_FR|Symfony - Ressources symfony en français]] 
 +  * [[http://​www.sensiolabs.com/​blog/​|Symfony - Le blog]] 
 + 
 +==== Les tutoriels ==== 
 + 
 +  * [[http://​www.symfony-project.org/​jobeet/​1_2/​Propel/​fr/​01|Symfony-project.org - Le projet Jobeet]] 
 +  * [[http://​www.symfony-project.org/​cookbook/​1_2/​fr/​|Symfony-project.org - Symfony le Cookbook]] 
 +  * [[http://​www.symfony-project.org/​forms/​1_2/​fr/​ | Symfony-project.org - Symfony le Forms en Action]] 
 +  * [[http://​www.lafermeduweb.net/​tutorial/​demarrer-un-projet-avec-symfony-p27.html|La Ferme du Web - Démarrer un projet avec Symfony]] 
 +  * [[http://​www.glagla.org/​weblog/​2008/​06/​19/​configuration-svn-pour-un-projet-symfony/​|Glagla Dot Org -
 Configuration SVN pour un projet Symfony]] Configuration SVN pour un projet Symfony]]
 +  * [[https://​c-maneu.developpez.com/​tutorial/​web/​php/​symfony/​intro/​|Developpez.com - Commencer à développer avec le framework symfony]]
 +  * [[http://​prendreuncafe.com/​blog/​post/​2006/​06/​20/​473-installer-le-framework-php-symfony-sur-ubuntu-dapper-drake|prendreuncafe.com - Installer le framework PHP Symfony sur Ubuntu Dapper Drake]]
  
-[[http://​c-maneu.developpez.com/​tutorial/​web/​php/​symfony/​intro/​|Developpez.com - Commencer à développer ​avec le framework symfony]]+===== Autres pages en lien avec les sujets =====
  
-[[http://​prendreuncafe.com/​blog/​post/​2006/​06/​20/​473-installer-le-framework-php-symfony-sur-ubuntu-dapper-drake|prendreuncafe.com - Installer le framework PHP Symfony sur Ubuntu Dapper Drake]]+{{topic>​programmation mysql php MVC apache}}
  
 ---- ----
-//Auteur ​: [[:utilisateurs:​lami|L'​ami René]]. Contributeur ​: //+ 
 +//Contributeur(e)s ​: [[utilisateurs:​lami|L'​ami René]] ​(L'​auteur),​ [[utilisateurs:YoBoY]].// 
  • tutoriel/demarrer_un_projet_web_avec_symfony.1250176648.txt.gz
  • Dernière modification: Le 18/04/2011, 14:50
  • (modification externe)