在Zend Framework 2中,我创建了一个扩展 Zend\Form\Form
的类,名为 MyForm
.
在一个Controller类的 indexAction
中,我将像这样初始化 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动作从未执行过?
我也知道我可以硬编码动作属性并让段路由处理处理,或者我甚至可以为此定义自己的路由 .
在什么情况下,表格行动应该得到自己的路线?
在什么情况下,应使用分段路径处理表单操作?
在什么情况下应该像我的例子一样处理表单操作?
如果没有严格的规则:不同的方法有什么意图沟通?
是否也可以在控制器而不是视图中添加表单操作?
1 回答
继续评论:这不是URL帮助程序的工作方式 - 如果省略第一个参数,则使用当前路径 . 这可能就是为什么你没有得到你期望的表单行为 .
就个人而言,我总是在使用URL帮助时指定路由名称 - 使事情更清晰 .