Consultez la FAQ sur le ZF avant de poster une question
Vous n'êtes pas identifié.
Pages: 1
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
Pages: 1