2013-10-12 4 views
0

J'ai une méthode d'action qui ne se déclenche que lors de la publication de données. Donc j'ajoute du code logique pour empêcher la requête get.Dans Zend Framework 1.12, comment éviter d'avoir une action?

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

Cela fonctionne. Mais je dois écrire ces extraits de code à plusieurs méthode d'action. Il semble tellement redondant.

Alors, existe-t-il une meilleure façon de l'implémenter comme le code ci-dessus?

+0

Vous pouvez ajouter votre code dans votre fichier de mise en page qui sera appelé pour chaque action, et vous pouvez vérifier votre condition et également transmettre des données si vous le souhaitez. –

+0

certaines actions n'ont besoin que d'une requête post, d'autres nécessitent get request.So ne peut pas le faire dans le fichier layout je pense. –

Répondre

1

Ajouter cette méthode à votre contrôleur

public function preDispatch(){ 
    if(!$this->_request->isPost() and in_array($this->_request->getParam('action'), array('action1', 'action2'))){ 
     exit('only post'); 
    } 
} 
1

Son trop tard pour répondre à cette question maintenant, mais espérons que cela aidera quelqu'un d'autre.

Si vous voulez faire cela pour un seul contrôleur, mieux vaut utiliser la méthode des contrôleurs _init() comme indiqué ci-dessous.

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

Si vous voulez la même chose pour plusieurs contrôleurs, vous pouvez créer un plugin frontController comme celui-ci.

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. 
      } 
    } 
} 

Ajouter cette méthode à votre classe Bootstrap pour activer le plug-in.

protected function _initPlugins(){ 
     $front = Zend_Controller_Front::getInstance(); 
     $front->registerPlugin(new Application_Plugin_Request(), 17); 
} 
Questions connexes