Ceci est une ancienne révision du document !
Présentation de Symfony
Symfony est un framework de developpement d'application php dont le but est de simplifier et d'accelerer la création d'applicatif web en se basant sur de nombreux scripts d'automatisation ainsi que sur l'utilisation d'un modèle très structuré appelé MVC.
Framework kesako?
Un framework, ou cadre de developpement en français, se dit d'un environnement visant à faciliter le developpement d'application. Il en existe un bon nombre dans la plus part des langages de programmation (Struts pour java, Ruby on Rails pour Ruby, Symfony pour PHP etc).
Il s'agit en general d'outils pour automatiser les opérations répétitives, pour structurer l'application, et respecter certaines normes. Ces outils peuvent être des plus basiques au plus complexes allant jusqu'a générer des applications entieres sans taper la moindre ligne de code.
Dans le framework Symfony, la structure utilisée s'appuie sur le modèle MVC, les scripts sont souvent en php et la syntaxe utilisée dans les differents fichiers de configuration est soit en XML soit en YML.
MVC kesako?
MVC est un modèle ultra répandu surtout en développement web, MVC signifiant Model-View-Controler. Son principal avantage etant de separer les données (partie Modelisation), leur traitement (partie Controleur), et la mise en forme (partie Vue).
Quand une page est appelée, le moteur Symfony appele la fonction correspondante du controleur qui va recupèrer et/ou traiter les données, qui passera ensuite tout ça à la partie vue. La partie vue dans beaucoup de framework emploie un langage de template specifique, ce n'est pas le cas de Symfony ce qui est encore un autre avantage.
Creation d'un projet Symfony
La création d'un projet commence par l'utilisation du script permettant de generer toute l'arborescence de votre application.
$ symfony init-project monProjet
L'arborescence Symfony
La commande précedente aura généré les répertoires suivants:
apps/ batch/ cache/ config/ data/ doc/ lib/ log/ plugins/ symfony* test/ web/
Le repertoire apps
Ce repertoire contiendra les differentes sous sections importantes de votre application, bien souvent un frontend et un backend (pour l'administration par exemple). Ces sous-sections (app dans Symfony) seront ensuite divisées en modules.
On retrouve les controleurs dans les modules de vos apps.
Comme dit plus haut, une page de votre site sera en fait une action dans un controleur d'un de vos modules. Imaginons que votre projet soit un blog, vous aurez donc une app frontend, avec un module article qui aura par exemple dans sa partie controleur une action lister, l'url pourra donc etre http://votreserveur/article/lister. L'action lister sera en fait une fonction executeLister() définie dans le fichier apps/frontend/modules/article/actions/actions.class.php.
Pour resumer: Navigateur web ⇒ URL ⇒ Routing symfony (par defaut ou personnalisé) ⇒ App ⇒ module ⇒ action ⇒ view
La deuxième étape après avoir créé notre projet consiste à initialiser une application. La commande est la suivant pour créer par exemple l'appli frontend:
$ symfony init-app frontend
On créé ensuite nos modules, par exemple le module article de notre appli frontend, avec la commande suivante:
$ symfony init-module frontend article
Le repertoire batch
Ce repertoire peut contenir des fichiers YML pour injecter des jeux de données, pour d'eventuels tests par exemple.
Le repertoire cache
Repertoire interne servant de cache pour Symfony.
Le repertoire config
Contient certains fichiers de configuration des différents éléments de Symfony, comme les informations de connexion sur la base de données, le modèle de données (schema.yml ou schema.xml), et d'autres propriétés interessantes.
Le repertoire data
Le repertoire doc
Le repertoire lib
Le repertoire log
Le repertoire plugins
Contient les plugins symfony installé pour votre projet. On installe un plugin avec la commande suivante:
$ symfony plugin-install <url>
Pour voir les plugins installés:
$ symfony plugin-list
Le repertoire symfony
Lien vers le repertoire où se trouve les bibliothèques de Symfony (le repertoire d'installation de Symfony).
Le repertoire test
Contient d'eventuels tests unitaires.
Le repertoire web
Ce repertoire contient la racine de votre site web (DocumentRoot d'Apache). On y trouve le repertoire images, css pour la mise en forme de vos pages web.
Installation de Symfony
Le plus simple pour installer Symfony est de passer par l'outil php pear. L'installation se fait avec les commandes suivantes:
# pear channel-discover pear.symfony-project.com # pear install symfony/symfony
Il faut bien sur avoir pear d'installé, sous fedora le package s'appelle php-pear. On peut donc l'installer avec la commande suivante:
# yum install php-pear
Configuration d'un vhost Apache utilisant Symfony
La configuration d'Apache pour un virtual host utilisant Symfony est la suivante:
<VirtualHost *:80> ServerAdmin root@domaine.com DocumentRoot /var/www/vhosts/www.domaine.com/web/ ServerName www.domaine.com:80 ErrorLog /var/log/httpd/www.domaine.com-error_log CustomLog /var/log/httpd/www.domaine.com-access_log combined <Directory "/usr/share/pear/data/symfony/web/sf"> AllowOverride All Allow from All </Directory> Alias /sf /usr/share/pear/data/symfony/web/sf <Directory "/var/www/vhosts/www.domaine.com/"> Options Indexes FollowSymLinks MultiViews AllowOverride All Order allow,deny Allow from all </Directory> </VirtualHost>
Deployer une application Symfony
Symfony contient aussi des outils pour faciliter le deploiement de projet Symfony.
On peut par exemple packager et deployer un projet Symfony sur une machine où Symfony ne serait pas installé. Il faut utiliser la commande suivante:
$ symfony freeze
Toutes les bibliothèques utilisées par votre projet seront deplacées dans votre arborescence. Il suffira ensuite de copier le repertoire de votre application sur votre serveur pour que tout fonctionne. Bien sur votre serveur doit quand meme disposer de php.
On peut revenir en arrière avec la commande:
$ symfony unfreeze
Symfony dispose aussi d'un script permettant de copier votre application sur un serveur distant en utilisant rsync par ssh. Pour cela il faut configurer vos serveur dans le fichier config/properties.ini comme suit:
[production1] host=myapp.example.com port=22 user=myuser dir=/home/myaccount/myproject/
On teste ensuite avec la commande suivante:
$ symfony sync production1
Cette commande lance le rsync avec l'option dry-run pour juste simuler le transfert.
On lance la synchronisation avec la commande suivante:
$ symfony sync production1 go