2013-06-13 53 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方法很少用在我的應用程序中 –