从基于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();
}
}
}
如果您了解更好的方式,请与我分享。感谢