zend_form: плохая практика - загружать форму в init () контроллера - PullRequest
1 голос
/ 28 октября 2010

У меня есть форма, которая мне нужна для некоторых действий, но не для других.В действиях, которые в этом нуждаются, я повторяю один и тот же код.

$form = New BlaBla_Form();

Я видел пример, который объявил это в init ().Это означает, что форма инициализируется даже для действий, которые ей не нужны.Это делает код чище, но достаточно ли ресурсоемко, чтобы сделать это плохой практикой?

Ответы [ 3 ]

3 голосов
/ 28 октября 2010

Попробуйте это:

  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;
      }
  }
2 голосов
/ 28 октября 2010

Решение Кейна довольно хорошо, за исключением того, что метод getForm() должен быть protected вместо public.

Обычно наличие protected / private методовв контроллере есть знак, что вы должны переместить их в помощник действий.

Однако я рекомендую хранить формы вместе с вашими моделями:

$form = $model->getForm();
$model->fromArray($form->getValues());
$model->save();
0 голосов
/ 28 октября 2010

Класс RegistrationController расширяет Zend_Controller_Action {protected $ _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;
  }

}

...