我有以下配置的errorHandler
'errorHandler' => [
'errorAction' => 'page/error',
],
在Controller页面中,在我要检查的操作错误中,我收到404错误"找不到页面"?
我该如何检查?
答案 0 :(得分:3)
如果您尝试自定义Error page
并希望在视图中单独获取错误代码,那么您可以使用$exception
,$name
和$message
个变量视图,但如果您使用yii\web\ErrorAction
,在我继续之前您需要查看您属于哪个类别。
\yii\web\ErrorAction
在PageController
内,您应该拥有如下所示的actions()
功能。
public function actions() {
return [
'error' => [
'class' => 'yii\web\ErrorAction' ,
]
];
}
如果您尚未为错误添加创建单独的布局,则最好将错误布局分开。只需复制layouts/main.php
并删除所有额外的CSS和js文件,或创建frontend/assets/ErrorAsset.php
并在布局文件的顶部注册。
在beforeAction()
中添加PageController
功能,如下所示。
示例代码
public function beforeAction( $action ) {
if ( parent::beforeAction ( $action ) ) {
//change layout for error action after
//checking for the error action name
//so that the layout is set for errors only
if ( $action->id == 'error' ) {
$this->layout = 'error';
}
return true;
}
}
现在,您已在'page/error'
组件的配置中指定errorHandler
,因此操作名称将为error
,因此视图文件也是如此,此视图文件应为在page
文件夹中,这应该是路径page/error.php
。您有$exception
变量可用于保存案例yii\web\NotFoundHttpException
对象中的异常对象。并且您可以致电$exception->statusCode
来检查针对该例外引发的状态代码,在您的情况下,它会显示404
。
另一种方法是在控制器内部使用自定义操作而不是使用yii\web\ErrorAction
,在这种情况下,您不需要添加actions()
函数,并且在自定义错误函数中应该调用
$exception = Yii::$app->getErrorHandler()->exception;
并使用$exception->statusCode
。请务必检查beforeAction()
功能内部的确切操作名称,并相应地更改支票
if ( $action->id == 'error' ) {
如果您不想要上述任何内容,只想查看控制器beforeAction()
内的异常代码,则必须访问上面的exception
对象,但需要通过config {{1组件。
erorHandler