我有以下 errorHandler 配置
'errorHandler' => [
'errorAction' => 'page/error',
],
在 Controller 页面中,在我想检查的操作错误中,我收到了 404 错误“找不到页面”?
如何检查?
最佳答案
如果您尝试自定义Error page
并且想要在 View 内单独获取错误代码,那么您有 $exception
, $name
和$message
View 内可用的变量,但以防万一您使用 yii\web\ErrorAction
,在我继续之前,您需要了解自己属于哪一类。
案例 1 使用\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
View 文件也是如此,该 View 文件应该位于page
内文件夹这应该是路径page/error.php
。你有$exception
可用变量保存您案例中的异常对象yii\web\NotFoundHttpException
目的。您可以调用$exception->statusCode
要检查异常抛出了哪个状态代码,在您的情况下,它将显示404
.
案例 2 使用自定义操作显示错误
另一种方法是在 Controller 内使用自定义操作,而不是使用 yii\web\ErrorAction
在这种情况下,您不需要添加 actions()
函数并在您应该调用的自定义错误函数内
$exception = Yii::$app->getErrorHandler()->exception;
并使用$exception->statusCode
。确保检查 beforeAction()
中的确切操作名称函数相应地更改您的支票行
if ( $action->id == 'error' ) {
<小时/>
案例 3 闭嘴,给我一个异常(exception)
如果您不想要上述任何内容,只想检查 Controller beforeAction()
内的异常代码您必须访问相同的 exception
上面的对象,但通过配置的 erorHandler
进行简写组件。
public function beforeAction($action) {
$exception = Yii::$app->getErrorHandler()->exception;
if(parent::beforeAction($action)) {
$hasError = $action->id == 'error' && $exception !== NULL;
if($hasError) {
echo $exception->statusCode;
return false;
}
}
return true;
}
关于php - yii2 : How to Customize Error Pages like 404 and 503,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48321461/