在ASP.NET MVC中,可以通過[HttpPost]或者[HttpGet]標籤使得Action方法只響應指定的提交方式。

在Zend Framework中沒有這種標籤方式,因此實現方式有點不同。

在ZF中,所有的Controller都有preDispatch方法,該方法在action方法呼叫前被呼叫,因此可以在這個方法上做文章。

在這個方法中判斷所進來的請求是get還是post,並且指定哪些action可以接受post方法,哪些可以接受get方法,即可實現。

示例程式碼如下:

public function preDispatch(){
if($this->_request->isPost())//如果是post動作
{
   //如果請求的action不在提供的列表中,則退出程式。
   if (false==in_array($this->getRequest()->getActionName(), array(`onlypost`))) {
       exit(`The action cannot be called by post`);
   }
}
        if($this->_request->isGet())//如果是Get動作
{
   //如果請求的action不在提供的列表中,則退出程式。
   if (false==in_array($this->getRequest()->getActionName(), array(`onlyget`))) {
       exit(`The action cannot be called by Get`);
   }
}
    }

這裡需要提起一下,在PHP框架 Zend Framework 1.12中,Zend_Controller_Request_Http被用來訪問整個HTTP請求環境。 因此,當你在action方法中,使用$this->getRequest(),其得到的物件本質型別是Zend_Controller_Request_Http,而不是簡單的Zend_Controller_Request_Abstract,事實上,抽象類也不能例項化。Zend_Controller_Request_Abstract中並沒有isPost()方法,而它的子類Zend_Controller_Request_Http中提供了該方法。