1

在 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 属性并让段路由处理处理,或者我什至可以为此定义一个自己的路由。

在什么情况下表单动作应该有自己的路线?
在什么情况下应该使用分段路由来处理表单操作?
在什么情况下应该像我的示例一样处理表单操作?

如果对此没有硬性规定:不同方法传达的意图是什么?

是否也可以在控制器而不是视图中添加表单操作?

4

1 回答 1

2

从评论继续:这不是 URL 帮助程序的工作方式 - 如果您省略第一个参数,则使用当前路由。这可能就是您没有得到您期望的表单操作的原因。

就个人而言,我总是在使用 URL 帮助程序时指定路由名称 - 使事情更清楚。

于 2014-08-12T22:59:35.527 回答