Yii2, an error occurs when throwing a NotFoundException

I have a simple code that works in the beforeAction event of my application:

'on beforeAction' => function ($event) { throw new \yii\web\NotFoundHttpException('The requested page does not exist.'); }, 

I expect it to just show the 404 page of my application, but this causes the following error:

 An Error occurred while handling another error: exception 'yii\web\NotFoundHttpException' with message 'The requested page does not exist.' in /home/files/www/ucms/config/frontend/config.php:9 Stack trace: 0 [internal function]: {closure}(Object(yii\base\ActionEvent)) 1 /home/files/www/ucms/vendor/yiisoft/yii2/base/Component.php(541): call_user_func(Object(Closure), Object(yii\base\ActionEvent)) 2 /home/files/www/ucms/vendor/yiisoft/yii2/base/Module.php(607): yii\base\Component->trigger('beforeAction', Object(yii\base\ActionEvent)) 3 /home/files/www/ucms/vendor/yiisoft/yii2/base/Controller.php(139): yii\base\Module->beforeAction(Object(yii\web\ErrorAction)) 4 /home/files/www/ucms/vendor/yiisoft/yii2/base/Module.php(455): yii\base\Controller->runAction('error', Array) 5 /home/files/www/ucms/vendor/yiisoft/yii2/web/ErrorHandler.php(85): yii\base\Module->runAction('site/error') 6 /home/files/www/ucms/vendor/yiisoft/yii2/base/ErrorHandler.php(109): yii\web\ErrorHandler->renderException(Object(yii\web\NotFoundHttpException)) 7 [internal function]: yii\base\ErrorHandler->handleException(Object(yii\web\NotFoundHttpException)) 8 {main} Previous exception: exception 'yii\web\NotFoundHttpException' with message 'The requested page does not exist.' in /home/files/www/ucms/config/frontend/config.php:9 Stack trace: 0 [internal function]: {closure}(Object(yii\base\ActionEvent)) 1 /home/files/www/ucms/vendor/yiisoft/yii2/base/Component.php(541): call_user_func(Object(Closure), Object(yii\base\ActionEvent)) 2 /home/files/www/ucms/vendor/yiisoft/yii2/base/Module.php(607): yii\base\Component->trigger('beforeAction', Object(yii\base\ActionEvent)) 3 /home/files/www/ucms/vendor/yiisoft/yii2/base/Controller.php(139): yii\base\Module->beforeAction(Object(yii\base\InlineAction)) 4 /home/files/www/ucms/vendor/yiisoft/yii2/base/Module.php(455): yii\base\Controller->runAction('', Array) 5 /home/files/www/ucms/vendor/yiisoft/yii2/web/Application.php(84): yii\base\Module->runAction('', Array) 6 /home/files/www/ucms/vendor/yiisoft/yii2/base/Application.php(375): yii\web\Application->handleRequest(Object(yii\web\Request)) 7 /home/files/www/ucms/web/index.php(17): yii\base\Application->run() 8 {main} 
+7
php yii2
source share
1 answer

The problem is in the ErrorHandler.php file on line 85 :

 $result = Yii::$app->runAction($this->errorAction); 

When ErrorHandler try to run ErrorAction , NotFoundHttpException will be NotFoundHttpException again and ErrorHandler simply display an error message without rendering.

Decision:

 public function beforeAction($action) { if(!$action instanceof \yii\web\ErrorAction) { throw new \yii\web\NotFoundHttpException('The requested page does not exist.'); } return parent::beforeAction($action); } 

Previous answer: On the production server, you also need to configure the correct environment settings in the index.php file:

 defined('YII_DEBUG') or define('YII_DEBUG', false); defined('YII_ENV') or define('YII_ENV', 'prod'); 
+7
source share

All Articles