Обработка исключений, возникающих в плагинах контроллера Zend Framework

У меня есть плагин Acl, который расширяет Zend_Controller_Plugin_Abstract , этот плагин обрабатывает весь мой код Acl.

Я хочу создать исключение в этом плагине, например, Exception_Unauthorised , а затем обработать это в моем ErrorController , таким образом, я могу использовать один и тот же плагин Acl для разных приложений и использовать ErrorController для разной обработки каждой ситуации в каждом приложении - если это необходимо.

Проблема заключается в том, что в плагин добавляется исключение -in не останавливает выполнение первоначального действия. Таким образом, я получаю исходный вывод 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");
    }
}
5
задан Jake N 24 August 2010 в 11:01
поделиться