Yii2自定义404/503错误页面及判断404错误的方法
判断Yii框架中Error动作是否为404错误的实现方法
嘿,这个问题我太熟悉了!在Yii框架里,要在Page控制器的error动作里判断是不是404“页面未找到”错误,其实只需要借助框架自带的异常处理机制就能搞定,具体实现步骤如下:
首先,你的errorHandler配置已经指向了page/error,接下来在Page控制器的actionError方法里,我们可以通过两种方式来判断404错误:
方法一:通过异常类判断(推荐)
Yii专门为404错误定义了NotFoundHttpException类,我们可以直接判断当前异常是否属于这个类的实例:
use yii\web\NotFoundHttpException; public function actionError() { // 获取当前的异常实例 $exception = \Yii::$app->errorHandler->exception; if ($exception instanceof NotFoundHttpException) { // 这里写404错误的专属处理逻辑,比如渲染自定义404页面 return $this->render('page-not-found', [ 'message' => $exception->getMessage(), ]); } // 处理其他类型的错误 return $this->render('general-error', [ 'exception' => $exception, ]); }
这种方法更精准,因为它直接对应框架定义的“页面未找到”场景,避免了和其他可能返回404状态码的异常混淆。
方法二:通过HTTP状态码判断
如果你更倾向于直接判断状态码,也可以读取异常的statusCode属性:
public function actionError() { $exception = \Yii::$app->errorHandler->exception; if ($exception->statusCode === 404) { // 404错误处理逻辑 return $this->render('page-not-found'); } // 其他错误处理 return $this->render('general-error'); }
注意事项
- 确保你已经引入了
NotFoundHttpException类,或者使用完整的命名空间\yii\web\NotFoundHttpException - 如果你的应用开启了调试模式,框架会显示详细的错误页面,但生产环境下会自动切换到你定义的错误视图
内容的提问来源于stack exchange,提问作者112Legion
相关产品推荐
相关产品推荐

