Ceci est une ancienne révision du document !


Présentation de Symfony

Symfony est un framework de développement d'applications PHP dont le but est de simplifier et d'accélérer la création d'applicatifs Web en se basant sur de nombreux scripts d'automatisation ainsi que sur l'utilisation d'un modèle très structuré appelé MVC.

Un framework, ou cadre de développement en français, se dit d'un environnement visant à faciliter le développement d'applications. 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 général 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'à générer des applications entières 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 différents fichiers de configuration est soit en XML soit en YML.

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.

La création d'un projet commence par l'utilisation du script permettant de générer toute l'arborescence de votre application.

$ symfony init-project monProjet

La commande précédente aura généré les répertoires suivants:

apps/
batch/
cache/
config/
data/
doc/
lib/
log/
plugins/
symfony*
test/
web/

Ce répertoire contiendra les différentes 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 contrôleurs dans les modules de vos apps.

Comme dit plus haut, une page de votre site sera en fait une action dans un contrôleur 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 contrôleur une action lister, L'URL pourra donc être 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 résumer: Navigateur Web ⇒ URL ⇒ Routing symfony (par défaut ou personnalisé) ⇒ App ⇒ module ⇒ action ⇒ view

FIXME définition du routing symfony

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'application frontend:

$ symfony init-app frontend

On créé ensuite nos modules, par exemple le module article de notre application frontend, avec la commande suivante:

$ symfony init-module frontend article

Ce répertoire peut contenir des fichiers YML pour injecter des jeux de données, pour d'éventuels tests par exemple.

Repertoire interne servant de cache pour Symfony.

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.

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

Lien vers le repertoire où se trouve les bibliothèques de Symfony (le repertoire d'installation de Symfony).

Contient d'eventuels tests unitaires.

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
  • symfony.1211982163.txt.gz
  • Dernière modification : 2012/10/30 22:48
  • (modification externe)