Effectuer un pré et/ou post traitement dans vos actions Symfony
Dans le genre, méthode symfony dont on ne parle pas qui peuvent être utiles, voici preExecute et son copain postExecute toutes les deux, méthodes de sfAction.
Comme leur nom le laisse à penser, ce sont des méthodes qui seront appeler en amont et en aval de l’exécution d’une action. Je n’ai pas vraiment d’idée d’utilisation à l’heure où j’écris mais dans un souci de factorisation, je trouve le concept intéressant et c’est bien avec ce genre de méthodes que je trouve Symfony si bien pensé.
Quelqu’un s’en est déjà servi? Une utilisation intéressante qui gagne à être connue?
Tags: astuce, optimisation, PHP, Symfony
7 Réponses
Laisser un message

Dans `nahoWikiPlugin` j’utilise preExecute pour charger de la configuration par exemple.
public function preExecute()
{
$this->anonymousEditing = sfConfig::get(‘app_nahoWikiPlugin_allow_anonymous_edit’, false);
$this->startPage = sfConfig::get(‘app_nahoWikiPlugin_start_page’, ‘index’);
$this->credentialsEdit = sfConfig::get(‘app_nahoWikiPlugin_credentials_edit’, array());
}
Ainsi si à l’avenir la façon de configurer ces différents éléments viens à changer, je n’aurai que le preExecute à modifier ;)
Une autre utilisation intéressante peut être le nettoyage automatisé de la requête.
ah oui très bonne idée, charger des paramètres propres au modules, ca me semble tout indiqué.
Je note ça, merci ;)
si tu as un module spécifique pour les appels AJAX, tu peux profiter de preExecute pour qq chose de ce genre:
public function preExecute()
{
$this->forward404Unless($this->getRequest()->isXmlHttpRequest());
}
Ca ajoute un niveau de sécurité et ca t’évite de le répéter dans chacune de tes actions.
Le preExecute est idéal pour factoriser du code type sécurité ou chargement de paramètre. Mais perso, je n’ai jamais utilisé de postExecute
Je m’en suis servi une fois… je ne sais même plus pourquoi, ni comment j’ai eu vent de l’existence de ces méthodes !
Dans l’admin generator afin de vérifier que l’enregistrement en cours d’edition est bien associé à l’utilisateur connecté:
class assoActions extends autoAssoActions
{
public function preExecute()
{
if( (!$this->getUser()->hasCredential(‘admin’)) && (($this->getActionName()==’edit’ || $this->getActionName()==’update’) && ($this->getRoute()->getObject()->user_id != $this->getUser()->getGuardUser()->id)) ) {
$this->forward(sfConfig::get(‘sf_secure_module’), sfConfig::get(‘sf_secure_action’));
}
parent::preExecute();
}
…
…
Merci pour cet exemple!