Effectuer un pré et/ou post traitement dans vos actions Symfony

dialog-information 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: , , ,

A propos de l'auteur

Développeur web spécialisé Symfony, il est avant tout passionné de web tout simplement. Il aime les défis et farfouiller dans le code de Symfony ou Doctrine. Fondateur du blog, il exerce chez Autrement.

Vous avez aimé ce billet? Faites le savoir!

  • Delicious
  • Twitter
  • Technorati Favorites
  • FriendFeed
  • Google Bookmarks
  • Share

7 Réponses

  1. naholyr 2 mai 2009 à 12 h 17 min #

    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.

  2. Tim 2 mai 2009 à 14 h 23 min #

    ah oui très bonne idée, charger des paramètres propres au modules, ca me semble tout indiqué.

    Je note ça, merci ;)

  3. cedric 4 mai 2009 à 0 h 11 min #

    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.

  4. Olivier 4 mai 2009 à 11 h 20 min #

    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

  5. Adrien M. 7 juin 2009 à 22 h 31 min #

    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 !

  6. Olivier 24 juin 2009 à 13 h 45 min #

    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();

    }

  7. Tim 24 juin 2009 à 14 h 04 min #

    Merci pour cet exemple!


Laisser un message