3

エラー処理module.phpを追加して、フラッシュ メッセンジャーにすべてのエラー メッセージを追加し、特定のページにリダイレクトしたい (私の要件):

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()ただし、プラグイン バインディングの前にエラーが生成される場合があるため、未定義のメソッド プラグインへの呼び出しがスローされるエラーもあります。redirect and flash messenger pluginsコントローラーを参照せずにアクセスする方法が欲しいです。

4

1 に答える 1

5

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'));
    }

これらのソリューションをここに投稿して、他の人が同じように再度検索する時間を節約できるようにしました。

于 2016-06-14T06:17:03.550 に答える