如何在不使用ZF2 ..中任何控制器对象的情况下访问module.php中的控制器插件?

我想在module.PHP添加错误处理,以在Flash Messenger中添加所有错误消息并重定向到特定页面(根据我的要求):

public function handleError(MvcEvent $e) {
        $exception = $e->getParam('exception');
        $controller = $e->getTarget();
        //echo $exception->getMessage(); exit;
        if (!$e->getApplication()->getServiceManager()->get('AuthService')->hasIdentity()) {
            $controller->flashMessenger()->addErrorMessage("Session Expired..!!");
            return $e->getTarget()->plugin('redirect')->toRoute('auth', array('action' => 'login'));
        }

        switch ($exception->getCode()) {
            case "2003" :
                $controller->flashMessenger()->addErrorMessage("Unable to connect database..!!");
                break;

            default :
                $controller->flashMessenger()->addErrorMessage($exception->getMessage());
                break;
        }

        $e->getApplication()->getServiceManager()->get('AuthService')->clearIdentity();
        return $e->getTarget()->plugin('redirect')->toRoute('auth', array('action' => 'login'));
    }

但是在某些错误中,它会抛出对$e-> getTarget()上未定义方法插件调用,因为在某些情况下,错误是在插件绑定之前生成的.我想要一种无需引用任何控制器即可访问重定向和Flash Messenger插件方法.

解决方法:

在尝试了多种在google上定义的方法后,我发现以下工作方式:

public function handleError(MvcEvent $e) {

        $exception = $e->getParam('exception');
        $sm = $e->getApplication()->getServiceManager();
        $flashmessenger = $sm->get('ControllerPluginManager')->get('flashmessenger');
        //echo $exception->getMessage(); exit;
        if (!$e->getApplication()->getServiceManager()->get('AuthService')->hasIdentity()) {
            $flashmessenger->addErrorMessage("Session Expired..!!");
            return $sm->get('ControllerPluginManager')->get('redirect')->toRoute('auth', array('action' => 'login'));
        }

        switch ($exception->getCode()) {
            case "2003" :
                $flashmessenger->addErrorMessage("Unable to connect database..!!");
                break;

            default :
                $flashmessenger->addErrorMessage($exception->getMessage());
                break;
        }

        $e->getApplication()->getServiceManager()->get('AuthService')->clearIdentity();
        return $sm->get('ControllerPluginManager')->get('redirect')->toRoute('auth', array('action' => 'login'));
    }

在这里发布了这些解决方案,这样可以节省其他人再次搜索的时间.

相关文章

统一支付是JSAPI/NATIVE/APP各种支付场景下生成支付订单,返...
统一支付是JSAPI/NATIVE/APP各种支付场景下生成支付订单,返...
前言 之前做了微信登录,所以总结一下微信授权登录并获取用户...
FastAdmin是我第一个接触的后台管理系统框架。FastAdmin是一...
之前公司需要一个内部的通讯软件,就叫我做一个。通讯软件嘛...
统一支付是JSAPI/NATIVE/APP各种支付场景下生成支付订单,返...