J'ai un plugin Acl qui s'étend sur Zend_Controller_Plugin_Abstract
, ce plugin gère tout mon code Acl.Gestion des exceptions lancées dans les plugins de contrôle de Zend Framework
Je souhaite lancer une exception dans ce plug-in, par ex. un Exception_Unauthorised
et puis gérer cela dans mon ErrorController
, de cette façon je peux utiliser le même plug-in Acl pour différentes applications et utiliser le ErrorController
pour gérer chaque situation dans chaque application différemment - si besoin est.
Le problème est que le lancement d'une exception dans le plug-in n'arrête pas l'exécution de l'action d'origine. Donc, je me retrouve avec la sortie de l'action d'origine et la sortie ErrorController
.
Comment puis-je obtenir une exception dans un plug-in pour arrêter l'action d'origine?
Case 1
// This throws the `Exception_NoPermissions`, but it does not get caught by
// `ErrorController`
public function preDispatch(Zend_Controller_Request_Abstract $request)
{
parent::preDispatch($request);
throw new Exception_NoPermissions("incorrect permissions");
}
Case 2
// This behaves as expected and allows me to catch my Exception
public function preDispatch(Zend_Controller_Request_Abstract $request)
{
parent::preDispatch($request);
try
{
throw new Exception_NoPermissions("incorrect permissions");
}
catch(Exception_NoPermissions $e)
{
}
}
Cas n ° 3
Je pense que c'est là la question est, en changeant le contrôleur.
public function preDispatch(Zend_Controller_Request_Abstract $request)
{
parent::preDispatch($request);
// Attempt to log in the user
// Check user against ACL
if(!$loggedIn || !$access)
{
// set controller to login, doing this displays the ErrorController output and
// the login controller
$request->getControllerName("login");
}
}
que tout a du sens. Je pense que je préfère rediriger l'utilisateur et le gérer de cette façon. Plutôt que de créer un plug-in pour attraper une Exception dans d'autres plug-ins, cela pourrait me perturber davantage! –
J'ai marqué ceci comme la réponse parce que vous ne pouvez pas sembler faire ce que je veux, mais c'est le plus proche d'y arriver. –