0

我有一个仅在向其发布数据时触发的操作方法。所以我添加了一些逻辑代码来阻止获取请求。

public function myAction()
{
        if($_SERVER['REQUEST_METHOD'] == "GET")
        {
            echo "No get!";
            die();
        }
        else
        {
          //some other codes
        }
}

有用。但是我必须将这些代码片段写入许多操作方法。它看起来很多余。

那么,有没有更好的方法来实现它,就像上面的代码一样?

4

2 回答 2

1

现在回答这个问题为时已晚,但希望它能对其他人有所帮助。

如果您只想为一个控制器执行此操作,那么您最好使用控制器 _init() 方法,如下所示。

public function _init() {
    if(!$this->getRequest()->isPost()){
       //The request is not post. Do what you like.
    }
}

如果你想为多个控制器做同样的事情,你可以像这样创建一个 frontController 插件。

class Application_Plugin_Request extends Zend_Controller_Plugin_Abstract {
    public function preDispatch(Zend_Controller_Request_Abstract $request){
        if(!$request->$isPost()){
                //The request is not post. Do what you like.   
            }
    }
}

将此方法添加到您的 Bootstrap 类以激活插件。

protected function _initPlugins(){
        $front = Zend_Controller_Front::getInstance();
        $front->registerPlugin(new Application_Plugin_Request(), 17); 
}
于 2014-04-25T15:14:02.320 回答
1

将此方法添加到您的控制器

public function preDispatch(){
    if(!$this->_request->isPost() and in_array($this->_request->getParam('action'), array('action1', 'action2'))){
        exit('only post');
    }
}
于 2013-10-13T20:04:16.973 回答