Symfony2 - Pré-requis et installation du Framework

Dans ce premier chapitre du tutoriel Watch My Desk version Symfony2, nous allons voir comment mettre en place le framework Symfony 2 sur son serveur: Introduction, pré-requis à installer sur son serveur, et mise en place des sources du projet.




Introduction


Après les 4 versions de la branche 1.x, Symfony fait peau neuve via la version 2 du framework.

Cette nouvelle version propose des changements assez radicaux par rapport aux 1.x.
Malheureusement oui ... il faudra vous lancer de nouveau dans l'apprentissage du framework (N'ayez crainte ! De nombreux concepts assimilés dans la version 1.x de Symfony vous permettront de comprendre plus rapidement la version 2).

Documentation de Symfony2


Après plusieurs projets développés avec Symfony2, nous pouvons vous confirmer: Le temps de formation en vaut la peine !
Au programme dans cette nouvelle version:
  • Des Bundles réutilisables dans vos différents projets
  • Des formulaires plus simples à mettre en place
  • Une gestion différente des classes métiers
  • Un système de templating plus évolué et réutilisable (héritage de templates etc.)
  • Des performances accrues
  • Un système de cache HTTP très poussé et efficace
  • Etc


Le projet Watch My Desk reste le même que pour la version 1. Nous allons totalement le revoir afin d'aboutir à un site web (en ligne sur http://www.watchmydesk.com/) sous Symfony2.

L'équipe du projet Watch My Desk


Le tutoriel a été réalisé de la manière suivante:

Développement et intégration
Bertrand Zuchuat, très connu dans la communauté Symfony sous le pseudo de Garfield-fr. Il est aussi auteur du blog http://www.funstaff.ch/
Twitter: @bertrandzuchuat

Graphisme:
La nouvelle version du design a été pensée et réalisée par Thomas Danzo, graphiste chez http://www.myeshop.fr/ via l'initiative de Sylvain Witmeyer.
Twitter: @myeshop

Rédaction du tutoriel
Jonathan Guillemain, aka DJo, fondateur de La Ferme du Web et auteur de la version 1 du tuto Symfony.
Twitter: @lafermeduweb

Voilà pour cette petite intro, vous êtes prêts ? C'est parti !


Pré-requis pour Symfony2


Commençons par installer notre environnement de développement.
Plusieurs choix s'offrent à vous pour réaliser le tutoriel Watch My Desk:
  • Créer une machine virtuelle avec une distribution linux. (Tutoriel pour mettre en place votre VM)
  • Mettre en place un serveur physique avec Linux (Option retenue)
  • Développer en local via Wamp, Mamp ...


Si vous ne savez pas comment mettre en place un serveur web, je vous invite à consulter le tutoriel Debian de la Ferme du Web, ou à faire une recherche sur Google pour en trouver un plus à jour. Vous en avez pour 1h maximum !


Packages à installer



Pour que le framework fonctionne avec notre tutoriel, vous devrez installer:
  • PHP 5.3.2 (ou plus)
  • MySQL
  • libxml 2.6.21 ou (plus)
  • php-intl (requis pour le tutoriel)
  • APC
  • mbstring
  • php-xml


Nous verrons par la suite comment vérifier que tous les packages ont bien été installés.




Télécharger et installer Symfony2


Différentes distributions de Symfony sont disponibles au téléchargement sur le site officiel.

Distributions Symfony2


Les distributions sont des versions packagées du framework pour une utilisation spécifique. Dans notre cas, nous utiliserons la version standard.

Télécharger le Framework Symfony2



Rendez-vous sur le site officiel de Symfony, et téléchargez la dernière version (Dans le tutoriel, nous utiliserons la version 2.0. Soyez attentifs aux changements si vous utilisez une version supérieure).

Pour gagner du temps, lancez un wget depuis votre console SSH, dans votre répertoire web:
wget http://symfony.com/download?v=Symfony_Standard_Vendors_2.0.0.tgz


Une fois téléchargé, décompressez l'archive ainsi:
tar -zxvf Symfony_Standard_Vendors_2.0.0.tgz


Et vous pouvez ensuite supprimer votre fichier Symfony_Standard_Vendors_2.0.0.tgz.
Placez maintenant le contenu du répertoire Symfony à la racine de votre répertoire web.

Exemple dans mon cas:
mv Symfony/* /home/djo/public/wmd/


Rendez vous dans votre répertoire web, et vous devriez trouver les fichiers suivants si tout s'est bien passé:
Code:
app  bin  deps  deps.lock  LICENSE  README.md  src  vendor  web



Configurer le framework Symfony2



Passons à présent à la configuration du framework.
Première chose à faire, mettre les bons droits sur les répertoires.
chmod -R 777 app/cache app/logs


Puis vérifier si nous avons bien tous les packages requis installés.

Lancez la commande suivante:
php app/check.php


La check liste va s'afficher. Il faut que vous ayez des OK sur le plus d'item possibles:
Code:
** Mandatory requirements **

  OK        Checking that PHP version is at least 5.3.2 (5.3.6 installed)
  OK        Checking that the "date.timezone" setting is set
  OK        Checking that app/cache/ directory is writable
  OK        Checking that the app/logs/ directory is writable
  OK        Checking that the json_encode() is available
  OK        Checking that the SQLite3 or PDO_SQLite extension is available
  OK        Checking that the session_start() is available
  OK        Checking that the ctype_alpha() is available

** Optional checks **

  OK        Checking that the PHP-XML module is installed
  OK        Checking that the libxml version is at least 2.6.21
  OK        Checking that the token_get_all() function is available
  OK        Checking that the mb_strlen() function is available
  OK        Checking that the iconv() function is available
  OK        Checking that the utf8_decode() is available
  OK        Checking that the posix_isatty() is available
  OK        Checking that the intl extension is available


[[WARNING]] Checking that the intl ICU version is at least 4+: FAILED
            *** Upgrade your intl extension with a newer ICU version (4+) ***
  OK        Checking that a PHP accelerator is installed
  OK        Checking that the APC version is at least 3.0.17
  OK        Checking that php.ini has short_open_tag set to off
  OK        Checking that php.ini has magic_quotes_gpc set to off
  OK        Checking that php.ini has register_globals set to off
  OK        Checking that php.ini has session.auto_start set to off

** Optional checks (Doctrine) **

  OK        Checking that PDO is installed
  OK        Checking that PDO has some drivers installed: mysql, sqlite


Si ce n'est pas le cas, installez les pré-requis. Si vous avez besoin d'aide, n'hésitez pas à faire un tour sur les forums de la Ferme du Web.

Comme dans la version 1.x, le framework dispose de lignes de commandes permettant de générer rapidement des fichiers, exécuter des actions etc.
Toutefois, vous allez rapidement rencontrer des problèmes de droit lorsque vous allez tenter de supprimer le cache, les logs etc. car Apache est le propriétaire des fichiers.
Autrement dit, si vous n'êtes pas root, vous ne pouvez pas supprimer le cache.

Il va donc falloir ruser et exécuter l'une de ces trois méthodes (Par ordre de priorité de choix conseillé):

1) Si vous avez un accès root ou sudo et que votre système supporte la commande chmod +a

rm -rf app/cache/* app/logs/*
sudo chmod +a "www-data allow delete,write,append,file_inherit,directory_inherit" app/cache app/logs
sudo chmod +a "drdjo allow delete,write,append,file_inherit,directory_inherit" app/cache app/logs


N'oubliez pas de remplacer les "drdjo" que vous trouvez par votre nom d'utilisateur système. Modifiez www-data par apache ou apache2 si besoin (suivant votre distribution linux).



2) Si vous avez un accès root ou sudo et que votre système supporte setfacl

sudo setfacl -R -m u:www-data:rwx -m u:drdjo:rwx app/cache app/logs
sudo setfacl -dR -m u:www-data:rwx -m u:drdjo:rwx app/cache app/logs


N'oubliez pas de remplacer les "drdjo" que vous trouvez par votre nom d'utilisateur système. Modifiez www-data par apache ou apache2 si besoin (suivant votre distribution linux). Si vous obtenez: "setfacl: Option -m: Argument invalide near character 3" c'est que vous vous êtes trompé dans le nom de votre user ou dans celui d'apache (apache, httpd, www-data)



3) Si vous n'avez pas d'accès root ou sudo

Ajoutez en haut des fichiers web/app.php, web/app_dev.php et app/console la ligne suivante:
Code php:
umask(0000);


Cette ligne permettra de créer les fichiers générés par Apache en chmod 777.


Créer le fichier vhost Apache



Ajoutez, si ce n'est pas encore fait, le fichier vhost apache dédié à votre projet. Voici le mien, à remplacer par vos valeurs:

Code:
<VirtualHost *:80>
    ServerName dev.watchmydesk.com
    DocumentRoot /home/djo/public/wmd/web

    <Directory "/home/djo/public/wmd/web">
        DirectoryIndex app.php
        Options -Indexes FollowSymLinks SymLinksifOwnerMatch
        AllowOverride All
        Allow from All
    </Directory>
</VirtualHost>


Il faut bien spécifier le DirectoryIndex app.php, car il n'y'a plus de fichier index.php comme dans les version 1.x. En production, vous pourrez aussi très bien renommer votre fichier app.php en index.php.

Pensez à ajouter dans votre fichier hosts la ligne pointant vers votre serveur ou sur votre local: 127.0.0.1 dev.watchmydesk.com dans /etc/hosts ou C:/Windows/System32/drivers/etc/hosts sur Windows.



Un petit restart d'apache et on peut tester si notre framework fonctionne correctement en se connectant sur le fichier config.php. Ex: http://dev.watchmydesk.com/config.php

Page de configuration du projet Symfon2


Si vous avez cette page, c'est que votre vhost fonctionne et que Symfony est bien installé. Vérifiez que vous n'ayez pas de pré-requis manquants.


Configurer Symfony2 avec parameters.ini


Dans Symfony2, il existe un fichier de configuration app/config/parameters.ini, dans lequel nous pourrons faire la configuration de base.

Ouvrez le et configurez votre base de données, changez la locale et la clé secrète:

Code:
[parameters]
    database_driver="pdo_mysql"
    database_host="localhost"
    database_port=""
    database_name="watchmydesk"
    database_user="watchmydesk"
    database_password="mypassword"
    mailer_transport="smtp"
    mailer_host="localhost"
    mailer_user=""
    mailer_password=""
    locale="fr"
    secret="fds842fsf5592b8452166qqdsdc10"


Vous pouvez aussi générer ce fichier directement avec config.php en suivant les différentes étapes:
Configuration de la BDD par le web


Il faudra aussi configurer votre serveur SMTP afin de pouvoir envoyer des emails depuis notre site web (sauf si vous disposez d'un serveur d'email en local).

Voilà, nous sommes prêts à nous lancer dans le développement sur le framework !

En vous connectant sur app_dev.php, vous pourrez découvrir la nouvelle barre de debug (Symfony Profiler). La barre vous permettra d'avoir pas mal d'informations pratiques comme le nombre de requête, temps d'exécution, emails en attente d'envoi, logs, requête HTTP ... De quoi debuguer plus facilement vos applications !
Profiler Symfony2 avec nouvelle barre de debug


En vous connectant sur app_dev.php, si vous n'êtes pas en local, vous allez obtenir l'erreur suivante: "You are not allowed to access this file. Check app_dev.php for more information.". Ajoutez votre IP dans la liste des IP autorisées en début du fichier app_dev.php pour ne plus avoir l'erreur.



Prochaine étape du tutoriel, les Bundles !





Rechercher sur la Ferme du web