У меня есть плагин Acl, который расширяет Zend_Controller_Plugin_Abstract
, этот плагин обрабатывает весь мой код Acl.Обработка Исключения, брошенные в плагины контроллера Zend Framework
Я хочу бросить исключение в этом подключаемом модуле, например. Exception_Unauthorised
, а затем обработайте это в моем ErrorController
, таким образом я могу использовать тот же плагин Acl для разных приложений и использовать ErrorController
для обработки каждой ситуации в каждом приложении по-разному - если нужно.
Проблема в том, что исключение Исключения в подключаемый модуль не останавливает выполнение оригинального действия. Таким образом, я получаю исходный выход Action и вывод ErrorController
.
Как я могу получить Исключение, брошенное в плагин, чтобы остановить исходное действие?
Случай 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");
}
Случай 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)
{
}
}
Случай 3
Я думаю, что это где проблема, путем изменения контроллера.
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");
}
}
это все имеет смысл. Думаю, я предпочел бы перенаправить пользователя и обработать его таким образом. Вместо того, чтобы создавать плагин для исключения Exception в других подключаемых модулях, может закончиться запутать меня больше! –
Я отметил это как ответ, потому что вы не можете делать то, что я хочу, но это ближе всего к тому, чтобы попасть туда. –