Zend表单setAction提交错误的url

时间:2012-03-30 02:24:41

标签: php zend-framework zend-form

我在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')

6 个答案:

答案 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

进行了相当广泛的讨论