Error handling 如何从模块重写错误处理程序

Error handling 如何从模块重写错误处理程序,error-handling,module,yii2,Error Handling,Module,Yii2,要覆盖基于模块的错误处理程序,请执行以下操作: 此方法仅适用于有效的模块控制器,但不能处理无效的模块控制器。甚至影响整个应用程序,因此模块错误处理程序将是整个应用程序的默认错误处理程序。我很困惑怎么才能解决它 示例:我愿意使用模块错误处理程序(www.site.com/module/default/error)处理www.site.com/module/x,其中x不是有效的模块控制器。如果不是这样,则使用应用程序错误处理程序(www.site.com/site/error)处理 最后我使用了这个

要覆盖基于模块的错误处理程序,请执行以下操作:

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

示例:我愿意使用模块错误处理程序(www.site.com/module/default/error)处理
www.site.com/module/x
,其中
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();
        }

    }
}

如果你知道更好的方法,请与我分享。谢谢

if($r\u array[0]=='admin')if在这种情况下对您有什么帮助?如果您正在运行
Admin::init()
我希望请求的路由以
Admin
开头,如果删除此条件,代码的行为是否相同?如果此行不检查,则错误处理程序的行为不正确。你可以试试。在这一行中,我们说只有当路由以
admin
模块开始时,应用程序才会替换
errorHandler
组件。在编写此代码之前,我想知道,当路由不是以
admin
启动时,为什么
errorHandler
组件被替换为
admin
错误处理程序。如果($r\u array[0]==='admin')在这种情况下对您有什么作用?如果您正在运行
Admin::init()
我希望请求的路由以
Admin
开头,如果删除此条件,代码的行为是否相同?如果此行不检查,则错误处理程序的行为不正确。你可以试试。在这一行中,我们说只有当路由以
admin
模块开始时,应用程序才会替换
errorHandler
组件。在这段代码之前,我想知道,当路由没有以
admin
启动时,为什么
errorHandler
组件被替换为
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();
        }

    }
}