Ich habe ein Acl-Plug-in, das Zend_Controller_Plugin_Abstract
erweitert, dieses Plug-in behandelt alle meine Acl-Code.Behandlung von Ausnahmen in Zend Framework-Controller-Plugins
Ich möchte geworfen eine Ausnahme in diesem Plug-in, z.B. ein Exception_Unauthorised
und dann handhabt dies in meinem ErrorController
, auf diese Weise ich die gleichen Acl-Plug-in für verschiedene Anwendungen verwenden kann, und verwenden Sie die ErrorController
jede Situation in jeder Anwendung unterschiedlich zu behandeln - wenn es sein muss.
Das Problem ist, dass das Auslösen einer Ausnahme im Plug-in die Ausführung der ursprünglichen Aktion nicht stoppt. Also habe ich am Ende die ursprüngliche Action-Ausgabe und die ErrorController
Ausgabe.
Wie kann ich eine Exception in ein Plug-in werfen, um die ursprüngliche Aktion zu stoppen?
Fall 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");
}
Fall 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)
{
}
}
Fall 3
Ich denke, das ist, wo das Problem ist, durch den Controller zu ändern.
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");
}
}
das macht alles Sinn. Ich denke, ich würde den Benutzer eher umleiten und damit umgehen. Anstatt ein Plug-in zu erstellen, um eine Exception in anderen Plug-Ins zu erfassen, könnte es am Ende für mich verwirrender sein! –
Ich markierte dies als die Antwort, weil Sie nicht tun können, was ich will, aber das ist am nächsten, um dorthin zu gelangen. –