如何从模块中覆盖错误处理程序

时间:2017-07-13 21:34:03

标签: error-handling module yii2

从基于this samdark guid的模块覆盖错误处理程序:

class Module extends \yii\base\Module
{
    public function init()
    {
        parent::init();
        \Yii::configure($this, [
            'components' => [
                'errorHandler' => [
                    'class' => ErrorHandler::className(),
                ]
            ],
        ]);

        /** @var ErrorHandler $handler */
        $handler = $this->get('errorHandler');
        \Yii::$app->set('errorHandler', $handler);
        $handler->register();
    }
}

此方法仅适用于有效模块控制器,但无法处理无效模块控制器。甚至影响整个应用程序,以便模块错误处理程序将是整个应用程序的默认错误处理程序。我很困惑怎么解决它!

示例:我愿意www.site.com/module/x处理模块错误处理程序(www.site.com/module/default/error),其中x不是有效模块控制器。如果情况并非如此,则使用应用程序错误处理程序(www.site.com/site/error)进行处理。

最后我使用了这段代码:( admin是我的模块名称)。知道一切都很好。

class AdminModule extends \yii\base\Module
{
    public function init()
    {
        parent::init();

        // Is better used regex method, temporally i used this method
        $r = Yii::$app->urlManager->parseRequest(Yii::$app->request)[0];
        $r_array = explode('/',$r);

        if($r_array[0] === 'admin'){
            Yii::configure($this, [
                'components' => [
                    'errorHandler' => [
                        'class' => ErrorHandler::className(),
                        'errorAction' => '/admin/default/error',
                    ]
                ],
            ]);

            $handler = $this->get('errorHandler');
            Yii::$app->set('errorHandler', $handler);
            $handler->register();
        }

    }
}

如果您了解更好的方式,请与我分享。感谢

0 个答案:

没有答案
相关问题