我有以下errorHandler的配置
'errorHandler' => [
'errorAction' => 'page/error',
],
Run Code Online (Sandbox Code Playgroud)
在“控制器”页面中,在要检查的“操作”错误中,出现了404错误“找不到页面”?
我该如何检查?
如果你想自定义Error page,并希望单独获取视图内的错误代码,那么你拥有的$exception,$name而$message可用的视图中的变量,但在情况下,如果你用yii\web\ErrorAction,我先走之前,你需要了解哪一类你倒下。
\yii\web\ErrorAction在您的内部,您PageController应该具有以下actions()功能。
public function actions() {
return [
'error' => [
'class' => 'yii\web\ErrorAction' ,
]
];
}
Run Code Online (Sandbox Code Playgroud)如果您尚未为错误创建单独的布局,请立即添加一个布局,最好将您的错误布局保持独立。只需复制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;
}
}
Run Code Online (Sandbox Code Playgroud)现在,您已经'page/error'在errorHandler组件的内部配置中指定了名称error,因此操作名称也应该是视图文件,该名称也应该是视图文件,该视图文件应位于page文件夹内,该文件夹应为path page/error.php。您拥有$exception可用的变量,该变量在您的案例yii\web\NotFoundHttpException对象中保存异常对象。然后您可以致电$exception->statusCode查看已为该异常抛出了哪个状态代码,在您的情况下,该代码将显示为404。
另一种方法是在控制器内部使用自定义操作,而不是使用,yii\web\ErrorAction在这种情况下,您无需添加actions()函数,而应在自定义错误函数内部调用
$exception = Yii::$app->getErrorHandler()->exception;
Run Code Online (Sandbox Code Playgroud)
并使用$exception->statusCode。确保检查beforeAction()函数内部的确切动作名称,并相应地更改该行的检查
if ( $action->id == 'error' ) {
Run Code Online (Sandbox Code Playgroud)
如果您不需要上面的任何内容,而只想检查控制器内部的Exception代码,则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;
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2384 次 |
| 最近记录: |