在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中提供了該方法。