Yii2,模块错误页面未显示但在错误404时显示空白页面

时间:2014-10-31 03:41:49

标签: error-handling yii2 custom-error-pages

我尝试在模块actionError中编写我自己的DefaultController,只是为了呈现错误页面(仅用于测试的HTML),它也只是显示空白页面而不是显示错误页面。

我在下面做正确的方法吗?仅当我尝试访问模块路径中的不存在页面时,它才会显示空白页。

在我的模块类中,我在errorHandler函数中配置了init()个组件,如下所示:

public function init()   
{   
    parent::init();   
    // initialize the module with the configuration loaded from config.php   
    \Yii::configure($this, require(__DIR__ . '/config.php'));   

    \Yii::$app->setComponents([
        'errorHandler' => [
            'class' => 'yii\web\ErrorHandler',
            'errorAction' => 'studconsult/default/error',
        ] // set error action route - this to be error action in DefaultController
    ]);             
}

在我的DefaultController课程中,我的代码如下:

public function actions()   
{    
    return [    
        'error' => [    
            'class' => 'yii\web\ErrorAction',    
        ],    
    ];    
}

2 个答案:

答案 0 :(得分:10)

你应该简单地使用它:

public function init()
{
    parent::init();
    Yii::$app->errorHandler->errorAction = 'studconsult/default/error';
}

以前的答案不太好,因为它会重置组件。

答案 1 :(得分:3)

似乎setComponents仅替换现有的那些组件。我想在你的app配置中没有这样的组件。我找到的最简单的路线是创建并注册它!

public function init()
{

    parent::init();   
    // initialize the module with the configuration loaded from config.php   
    \Yii::configure($this, require(__DIR__ . '/config.php'));  

    //override default error handler
    $handler = new \yii\web\ErrorHandler(['errorAction' => 'studconsult/default/error']);
    Yii::$app->set('errorHandler', $handler);
    $handler->register(); 

}