zend_form:在控制器的init()中加载表单是不好的做法

时间:2010-10-28 12:12:24

标签: php zend-framework zend-form

我有一个表格,我需要一些行动,但不是其他人。在需要它的操作中,我重复相同的代码。

$form = New BlaBla_Form();

我见过一个在init()中声明它的例子。这意味着即使对于不需要它的操作,表单也会被初始化。它确实使代码更清晰,但它是否足够资源以使其成为一种不好的做法?

3 个答案:

答案 0 :(得分:3)

试试这个:

  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;
      }
  }

答案 1 :(得分:2)

Keyne's solution非常好,除了getForm()方法应该是protected而不是public

通常,控制器中存在protected / private方法是一个标志,您应该将它们移动到动作助手。

但是,我建议将表单与模型一起保存:

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

答案 2 :(得分:0)

类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;
  }

}