Error handling 如何从模块重写错误处理程序
要覆盖基于模块的错误处理程序,请执行以下操作: 此方法仅适用于有效的模块控制器,但不能处理无效的模块控制器。甚至影响整个应用程序,因此模块错误处理程序将是整个应用程序的默认错误处理程序。我很困惑怎么才能解决它 示例:我愿意使用模块错误处理程序(www.site.com/module/default/error)处理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/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();
}
}
}