2010-10-28 3 views
1

J'ai une forme dont j'ai besoin pour certaines actions mais pas pour d'autres. Dans les actions qui en ont besoin, je répète le même code.zend_form: est-ce une mauvaise pratique de charger un formulaire dans init() du contrôleur

$form = New BlaBla_Form(); 

J'ai vu un exemple qui l'a déclaré dans init(). Cela signifie que le formulaire est initialisé même pour les actions qui n'en ont pas besoin. Cela rend le code plus propre, mais est-ce suffisamment gourmand en ressources pour en faire une mauvaise pratique?

Répondre

3

Essayez ceci:

class RegistrationController extends Zend_Controller_Action 
    { 
     protected $_form; 

     public function fooAction() 
     { 
      // ... 

      if($this->getForm()->isValid()) { } 

      // ... 
     } 

     protected function getForm() 
     { 

      if (null === $this->_form) { 
       $this->_form = new My_Form_Registration(); 
      } 

      return $this->_form; 
     } 
    } 
0

RegistrationController class extends Zend_Controller_Action { protégé _form $ = null;

public function fooAction() 
    { 
     // ... 

     if($this->getForm()->isValid()) { } 

     // ... 
    } 

    public function getForm() 
    { 
     $this->_form = (null === $this->_form)? new My_Form_Registration():$this->_form; 
     return $this->_form; 
    } 

}

2

Keyne's solution est tout à fait agréable, à l'exception de la méthode getForm() doit être protected au lieu de public.

Habituellement, la présence de méthodes protected/private dans le contrôleur est un signe que vous devez les déplacer vers l'assistant d'action.

Cependant, je recommande de garder les formes avec vos modèles:

$form = $model->getForm(); 
$model->fromArray($form->getValues()); 
$model->save(); 
+0

Merci @takeshin. Fixé maintenant J'ai utilisé pour créer la méthode getForm() à l'intérieur du contrôleur mais maintenant j'ai décidé de passer aux modèles. C'est une bonne ideia et je l'ai déjà recommandé ici http://stackoverflow.com/questions/3987532/where-does-zend-form-fit-in-the-model-view-controller-paradigma/4018185#4018185 –

Questions connexes