我的 Zend 表单有以下代码:
$this->setAction('/contact/index')->setMethod('post');
表格在这里显示良好:
本地主机/我的项目/公共/联系人/索引
但是,表单提交给:
localhost/contact/index 而不是:localhost/my_project/public/contact/index
我该如何解决这个问题,这是服务器配置问题吗?
我的 Zend 表单有以下代码:
$this->setAction('/contact/index')->setMethod('post');
表格在这里显示良好:
本地主机/我的项目/公共/联系人/索引
但是,表单提交给:
localhost/contact/index 而不是:localhost/my_project/public/contact/index
我该如何解决这个问题,这是服务器配置问题吗?
问题是它不使用baseurl
最简单的解决方案是在视图中设置动作
//view.phtml
$form= $this->form; //Comes from controller or create a new instance
$form->setAction($this->baseUrl("contact/index"));
echo $form;
您还可以继承 Zend_Form 并修改 setAction 以使用 baseurl
您还可以设置表单的视图
class Application_Form_Something extends...{
protect $_view;
function setView($view){
$this->_view->$view;
}
function setAction($url){
parent::setAction($this->_view->baseUrl($url));
}
}
//And in controller:
$form->setView($this->view);
在相关说明中,我发现了另一种设置 baseurl 的方法。这似乎是迄今为止最好的一个,虽然我不确定这是否是正确的做法。
class Application_Form_Something extends...{
function setAction($url){
$baseUrlHelper= new Zend_View_Helper_BaseUrl();
parent::setAction($baseUrlHelper->baseUrl($url));
}
}
您也可以在 init 方法本身中执行此操作。