Zend FR

Consultez la FAQ sur le ZF avant de poster une question

Vous n'êtes pas identifié.

#1 28-05-2008 17:40:59

Broceliand
Nouveau membre
Date d'inscription: 22-05-2008
Messages: 5

Comment ajouter des getters et des setters à la vue ?

Bonjour,

J'ai un petit problème de design avec le modèle MVC de Zend. Je pense qu'une solution propre existe, mais je n'ai pas encore mis le doigt dessus.

Mon problème est le suivant. En utilisant des assignations du type $this->view->variable = $value; et en les récupérant dans la vue par des echo $this->variable on ne sait jamais vraiment quelles sont les variables nécessaires à la vue pour être affichée correctement.
C'est à dire que si un développeur modifie le code du contrôleur et oublie de définir une variable, on se retrouve avec un affichage indésirable.
J'aurais donc bien voulu avoir une interface qui contiendrait des Getters et des Setters de manière à mieux contrôler les variables que l'on passe à la vue. Et c'est aussi plus agréable à coder car on aurait l'auto-complétion.

J'ai trouvé une manière temporaire de faire cela mais j'aimerais valider une structure propre et pérenne. C'est la raison de ce post. Voila comment je fais actuellement:

class LoginController extends Zend_Controller_Action
{
...
    public function indexAction ()
    {
        ...

        $layout = new LoginLayout();
       
        $layout->setLoginForm($this->getLoginForm())
               ->setRegisterForm($this->getRegisterForm())
               ->setDate(Zend_Date::now())
               ->setLanguage($locale->getTranslation($locale->getLanguage(), 'language'));
       
        $layout->setLayout('login/index');
        $layout->render();

    }
...
}

class LoginLayout extends Zend_Layout {
   
    /**
     * Validate layout before rendering
     */
    public function render($name=null){
       
        if( !$this->date ||
            !$this->language ||
            !$this->registerForm ||
            !$this->loginForm )
        {
            throw new Exception("Invalid layout, view won't be rendered");
        }
        return parent::render($name);
    }
   
    public function setLanguage($value){
        $this->language = $value;
        return $this;
    }
   
    public function setDate($value){
        $this->date = $value;
        return $this;   
    }

    ...
}


Et dans le index.phtml je récupère mes variables avec appels du type:
$this->layout()->date

Merci par avance de votre aide dans ma réflexion.

Hors ligne

 

Pied de page des forums

Propulsé par PunBB
© Copyright 2002–2005 Rickard Andersson
Traduction par punbb.fr

Graphisme réalisé par l'agence Rodolphe Eveilleau
Développement par Kitpages