2013-06-13 34 views
0

我的Zend的形式有以下代码:Zend公司形式的setAction提交错误的URL

$this->setAction('/contact/index')->setMethod('post'); 

的形式显示在此处罚款:

本地主机/ MY_PROJECT /公/联系人/索引

但是,表单提交到:

本地主机/联系人/指数 相反的: 本地主机/ MY_PROJECT /公/联系人/索引

如何解决这一点,它是一个服务器配置问题?

回答

4

的问题是,它不使用的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方法中做到这一点。

+0

谢谢!但是:是不是在视图中注入业务逻辑的动作? –

+0

是的。您也可以在控制器中执行此操作。 $ this-> view-> baseUrl而不是$ this-> baseUrl。 另一种替代方法是为表单设置视图。大多数情况下我都会看到更新的答案 –

+0

,因此我提交到与呈现表单的url相同的url,所以setAction方法很少用在我的应用程序中 –