我有一个扩展的Acl插件Zend_Controller_Plugin_Abstract
,这个插件处理我所有的Acl代码.
我想在这个插件中抛出一个Exception,例如Exception_Unauthorised
,然后在我的处理中ErrorController
,这样我就可以为不同的应用程序使用相同的Acl插件,并使用它ErrorController
来处理每个应用程序中的每个情况 - 如果需要的话.
问题是在插件中抛出异常并不会阻止原始Action执行.所以我最终得到了原始的Action输出和ErrorController
输出.
如何在插件中抛出异常以阻止原始Action发生?
情况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"); } }
BasTaller.. 5
看一下这篇文章:http://akrabat.com/zend-framework/handling-exceptions-in-a-front-controller-plugin/
看一下这篇文章:http://akrabat.com/zend-framework/handling-exceptions-in-a-front-controller-plugin/