Symfony ne proposant pas une fonctionnalité me permettant de définir un message en cas de non disponibilité de la base de données, j’ai réalisé un filtre pour contrôler cela. Pour le rendre flexible, j’ai ajouté deux options permettant la définition du module et de l’action appelé lors de l’erreur.
J’ai commencé par créer dans mon module default, une action checkAvailibility me permettant de réaliser un template pour l’affichage du message (je passe sur cette étape car je pense que vous savez le faire). Ensuite, il suffit de les définir dans le fichier app.yml:
all: checkdb: module: default action: checkAvailibility
J’ai ensuite créé mon fichier filtre appelé « checkAvailibilityDbFilter.class.php » dans le dossier /lib de mon projet:
class checkAvailibilityDbFilter extends sfFilter { public function execute($filterChain) { if ($this->isFirstCall()) { $context = $this->getContext(); $module = sfConfig::get('app_checkdb_module', 'default'); $action = sfConfig::get('app_checkdb_action', 'error404'); if (($module != $context->getModuleName()) || ($action != $context->getActionName())) { $configuration = sfProjectConfiguration::getActive(); $db = new sfDatabaseManager($configuration); foreach ($db->getNames() as $connection) { try { @$db->getDatabase($connection)->getConnection(); } catch(Exception $e) { $context->getController()->forward($module, $action); exit; } } } } $filterChain->execute(); } }
Il reste encore à activer ce filtre pour que cela fonctionne. J’ai ajouté les lignes suivantes dans le fichier filters.yml du dossier config de l’application:
rendering: ~ security: ~ # insert your own filters here db: class: checkAvailibilityDbFilter cache: ~ common: ~ execution: ~
J’espère que cette petite astuce vous sera utile.