在ASP.NET MVC中,可以通过[HttpPost]或者[HttpGet]标签使得Action方法只响应指定的提交方式。
在Zend Framework中没有这种标签方式,因此实现方式有点不同。
在ZF中,所有的Controller都有preDispatch方法,该方法在action方法调用前被调用,因此可以在这个方法上做文章。
在这个方法中判断所进来的请求是get还是post,并且指定哪些action可以接受post方法,哪些可以接受get方法,即可实现。
示例代码如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
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中提供了该方法。
本文转自cnn23711151CTO博客,原文链接:http://blog.51cto.com/cnn237111/1308709 ,如需转载请自行联系原作者