2013-10-12 45 views
0

我有一个操作方法,只有在向其发布数据时才会触发。 所以我添加了一些逻辑代码来防止获取请求。在Zend Framework 1.12中,如何避免获取操作?

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

它的工作原理。 但我必须将这些代码片段写入许多操作方法。它看起来如此多余。

那么,有没有更好的方式来实现它像上面的代码?

+0

你可以将其称之为对每一个动作你的布局文件添加你的代码,你可以检查你的病情,也可以通过一些数据一起,如果你喜欢。 –

+0

某些操作只需要发布请求,有些需要获取请求。因此,我认为不能在布局文件中进行操作。 –

回答

1

此方法添加到您的控制器

public function preDispatch(){ 
    if(!$this->_request->isPost() and in_array($this->_request->getParam('action'), array('action1', 'action2'))){ 
     exit('only post'); 
    } 
} 
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); 
} 
相关问题