我有一个表格,我需要一些行动,但不是其他人。在需要它的操作中,我重复相同的代码。
$form = New BlaBla_Form();
我见过一个在init()中声明它的例子。这意味着即使对于不需要它的操作,表单也会被初始化。它确实使代码更清晰,但它是否足够资源以使其成为一种不好的做法?
答案 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;
}
}