Customiser les messages d’erreurs - Les donnéesLa Sandbox - Chez le client


Customiser les messages d’erreurs

La gestion des erreurs est un des points forts de Symfony. Mais l’internaute ne DOIT pas les voir.
On va donc le renvoyer en cas d’erreur vers une belle page d’erreur personnalisée.



Pour l’erreur 404, « page not found » c’est très simple

Dans le fichier settings de votre application /apps/front/config/setting.yml
Il faut tout simplement rajouter ces deux directives

all:
error_404_module: home
error_404_action: error404

Vous pouvez mettre le nom de module et le nom d’action de votre choix.
Ensuite quand une erreur 404 se produira, c’est votre page qui sera affichée, vous pourrez donc dans votre action ajouter une petite ligne pour vous envoyer un mail ou un log.

Pour l’erreur 505, « une exception à été générée » c’est un peu plus compliqué.

Pour personnaliser cette page vous devez placer un fichier « error.html.php » dans le répertoire « apps/front/config/error » (créez le au besoin). Et c’est tout.
Mais du coup voilà, nous ne sommes pas dans une application.
Cette page n’est pas incluse dans votre layout et on ne peut non plus utiliser les classes Symfony.
La page d’erreur 500 est donc complètement statique.

Les données

L’application fonctionne, oui mais les données n’existent pas.
Si vous souhaitez installer les données par défaut, il vous suffira de créer la base de données chez le client (en s’assurant que le nom soit bien le bon) et de lancer la commande build-all dans le dossier du nouveau projet.
Si vous avez déjà inséré des données pour le client, il vous faut sauvegarder votre base de données. (mais c’est certainement déjà fait)
Le moyen le plus simple est d’utiliser MySQL Administrator.

Une fois l’application installée et connectée a votre base de données locale, lancez un backup uniquement sur le contenu.
Pour cela, allez créez un « projet », puis allez dans l’onglet « Advanced Options » et sélectionnez les check box comme sur la copie d’écran :



Enregistrez le fichier .sql, puis éditez-le dans un éditeur de texte.

Nettoyer tous les inserts inutiles. Dans le cas de certains plugins ils peuvent même être problématiques.

Copiez le sql nettoyé dans le dossier data/sql/ de votre application. (à créer s’il n’existe pas encore.)

La Sandbox

Faites une copie complète de votre projet, et placez là dans votre trunk .
Nous allons travailler sur cette copie.
Nettoyez les dossiers et fichiers dans votre application (les images de tests, les dossiers CVS, SVN, etc…)
Symfony fonctionne avec une bibliothèque qui se trouve à l’extérieur de votre projet. (dans le dossier « vendors » si vous avez installé via svn.) Pour livrer l’application il faudra donc rapatrier ces fichiers
Une fois votre application finalisée et le nettoyage fait, Symfony propose une ligne de commande pour rapatrier les dossiers nécessaires à son fonctionnement :

symfony freeze \addresseVersMonDossierDeSymfonyEx  : symfony freeze  \wamp\www\vendor\symfonyPuis : symfony  cc

Cette commande copie les fichiers nécessaires et passe les adresses en relatives dans les fichiers de configuration.
Votre dossier est désormais autonome.

Il reste encore quelques fichiers à modifier pour passer l’application en mode « production »
symfony clear-controllersCette commande supprime tous les accès de développement.
On s’assure ainsi qu’il n’y ai pas de possibilités dérobées pour accéder à l’application.
Ensuite une commande sur les droits d’accès au dossier (chmod)
symfony fix-permsCette commande corrige les droits non corrects aux dossiers log/ et cache/
Attention, elle ne suffit pas à régler tous les droits d’accès nécessaires

Vous pouvez donc déplacer les dossiers vers le répertoire de destination, via ftp par exemple, ou zipper le dossier du projet et l’envoyer à votre destinataire.


Chez le client

Vérifier la configuration serveur du client

Pour tester si un serveur est correctement configuré pour accueil  symfony, sensio, l’éditeur de symfony à prévu un script de test.
> Télécharger le script de détection de configuration serveur Symfony 

Copiez le dans le dossier web de votre projet.
Testez le ensuite avec votre navigateur.
Le script vous affichera les informations valides ou non.

Configuration Apache

Au minimum, Symfony requière deux modules apache pour fonctionner :

  • mod_rewrite
  • php5_module

Ces modules sont rarement activés sur les hébergements mutualisés.
Pensez également à activer les modules requis par vos plugins et vos développements

httpd.conf

Il faut modifier la directive suivante comme suit dans httpd.conf, se trouvant normalement sous /etc/httpd/conf
AllowOverride all
Il faut aussi créer un virtual host qui pointe vers le répertoire logista/web de l’application. Un exemple est donné ci-dessous :

<VirtualHost *:80>
ServerName logista
DocumentRoot "/usr/local/share/monProjet/web"
<Directory "/usr/local/share/monProjet/web">
AllowOverride All
Allow from All
</Directory>
</VirtualHost>

Une autre solution est de rediriger vers le dossier WEB via un .htaccess

Modules PHP nécessaires

Pour éviter les problèmes, voici les modules PHP que j’active systématiquement

  • php_gd2
  • php_pdo
  • php_pdo_mysql
  • php_mcrypt
  • php_xsl
  • php_mysql

Comme pour les modules apache, certain plugin vont demander d’activer d’autres modules.
Ne les oubliez pas !

Déploiement

Tout d’abord nous allons configurer l’accès à la BDD de production.
Si vous avez accès à la ligne de commande :

symfony  configure:database "mysql:host=localhost;dbname=prod_dbname"  prod_user prod_pass
Sinon vous devrez modifier le ficher database.yml dans le dossier config/ du projet.

Vous pouvez lancer ensuite les commandes symfony project:permissions
symfony propel:build-model
symfony propel:build-forms
symfony propel:build-filters
symfony propel:build-sql
symfony propel:insert-sql --no-confirmation
symfony propel:data-load
symfony plugin:publish-assets
symfony cc
Un moyen plus simple est de tout rassembler dans un fichier .bat et lancer toutes les commandes en une seule fois.
Cela risque de moins effrayer votre client.

Importation des données

Reste à insérer les données de votre dernier .sql
sous linux lancez la commande.

mysql –u root  –p logista < data/sql/monFichier.sql

Création indexes

Il faut ensuite lancer la commande symfony suivante pour créer les indexs des contenus intégrés

php symfony create-index --env=prod admin


Configuration de Démarrage

Pour configurer le serveur smtp d’envoi des emails, il faut modifier les lignes suivantes du fichier /apps/logista/config/app.yml

mail:
host: smtp.monDomaine.tdl
port: 25
Il faut ensuite lancer la commande suivante pour supprimer le cache
php symfony cc

Votre application devrait enfin fonctionner !