在 Zend Framework 2 中,我创建了一个扩展Zend\Form\Form
名为MyForm
.
在indexAction
一个 Controller 类中,我将MyForm
这样初始化:
public function indexAction()
{
$form = new MyForm('my-name');
$viewModel = new ViewModel(array('form' => $form));
return $viewModel;
}
然后在对应的视图中,我基本上只是做
$form = $this->form;
$form->prepare();
echo $this->form()->openTag($this->form);
echo $this->formCollection($form);
echo $this->form()->closeTag();
这一切都有效,但您可能已经注意到表单的操作丢失了。
我试图在视图中添加这样的操作:
$form->setAttribute('action', $this->url(NULL, array('controller'=>'Index', 'action' => 'go')));
然后在我的 IndexController 中的 go 操作中,我只有这个用于测试:
public function goAction()
{
die('huh');
}
这根本不起作用,我总是再次进入表单视图(==索引操作)。为什么 go 动作从不执行?
我也知道我可以硬编码 action 属性并让段路由处理处理,或者我什至可以为此定义一个自己的路由。
在什么情况下表单动作应该有自己的路线?
在什么情况下应该使用分段路由来处理表单操作?
在什么情况下应该像我的示例一样处理表单操作?
如果对此没有硬性规定:不同方法传达的意图是什么?
是否也可以在控制器而不是视图中添加表单操作?