当前位置:  开发笔记 > 编程语言 > 正文

处理Zend Framework的Controller插件中抛出的异常

如何解决《处理ZendFramework的Controller插件中抛出的异常》经验,为你挑选了1个好方法。

我有一个扩展的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/



1> BasTaller..:

看一下这篇文章:http://akrabat.com/zend-framework/handling-exceptions-in-a-front-controller-plugin/

推荐阅读
Chloemw
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有