我在zend表单中遇到setAction问题。我有一个多页表单,所有子表单我都设置了相同的操作
$subForm->setAction('process')
->setMethod('post');
我的表单正在索引操作,应用程序控制器,买方模块中呈现 http://localhost/project/public/buyer/application但是当我提交表单时,网址被重定向/发布到网址:http://localhost/project/public/buyer/process(到不存在的网页)
当我在我的机器上设置虚拟服务器时似乎工作正常但是在使用localhost或部署在任何其他服务器时我无法使其工作。
我尝试了整个网址,但它似乎无法正常工作,即$subForm->setAction('buyer/applciation/process')
或$subForm->setAction('application/process')
答案 0 :(得分:2)
我总是发现使用Url帮助器从视图中设置表单的action属性最简单。试试这个
<?php echo $this->form->setAction($this->url(array(
'action' => 'process'
))) ?>
答案 1 :(得分:1)
我发现我的代码出了什么问题,似乎zend正在处理我的网址: -
http://localhost/project/public/buyer/application作为买方控制器和应用程序操作,即因为操作是索引而且它不包含在我的URL中。我的代码$form->setAction('process');
会做的是它只是将'application'替换为'process'http://localhost/project/public/buyer/process,假设该应用程序是动作。如果我没有错,那么这可能是一个错误,或者看起来似乎是错误的。
我将动作索引重命名为表单,现在它似乎正在运行。虽然我喜欢@Phil的建议。但只是让其他人冒犯
答案 2 :(得分:0)
您是否使用ZF需要的重写规则设置了apache?
http://framework.zend.com/manual/1.10/en/project-structure.rewrite.html
答案 3 :(得分:0)
当您执行$ subForm-&gt; setAction('process')时,它实际上是在/ project / public / buyer / application处设置url的相对路径,这意味着它将假设项目,公共和买方是目录和流程应与应用程序处于同一级别。
试试这个:
$this->form->setAction('/application/process');
我不确定正确的网址是什么,但我会尝试使用带有领导/的网址,以便它不再相对。
答案 4 :(得分:0)
DO
$subForm->setAction($this->getView()->url(array('action'=>'process','controller'=>'application','module'=>'buyer'),null,true))
->setMethod('post');
答案 5 :(得分:0)
在我看来问题是process
不是控制器中的动作。它看起来更像是被调用的方法或类。您在ZF中最常看到的是将表单操作设置为操作。
//set form action to a controller action where you can call process against the form.
$form->setAction('action')//or 'controller/action' or 'module/controller/action'
ZF参考对如何做multi part forms
进行了相当广泛的讨论