如何动态更改Yii Error Handler?

时间:2013-05-07 10:07:08

标签: php error-handling yii

在Yii的config.php中,我们有这样的语句,声明哪个Controller是应用程序中的默认控制器,只有一个错误处理程序:

'errorHandler' => array(
    'errorAction' => 'site/error',
),

因此,我需要在 SiteController 下设置一个actionError(),以便在我的网站中预览错误,但这不是我真正需要的。

我试图在扩展基座Yii::app()->errorHandler->errorAction(Yii的基本控制器)的自定义控制器中动态更改CController

直到现在,我尝试过这样的事情:

<?php

class AdminController extends CController {

    public $layout = '//layouts/admin';

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

}

但是没有结果,也没有希望。请注意,我也有此URL配置:

'/admin' => '/admin/home',
'/admin/<controller:\w+>' => '/admin/<controller>',
'/admin/<controller:\w+>/<action:\w+>/<id:\d+>' => '/admin/<controller>/<action>',
'/admin/<controller:\w+>/<action:\w+>' => '/admin/<controller>/<action>',

这意味着我有一个名为 admin 的完整 Controllers-Views 组,它们存储在以下目录中:

  • 保护/控制器/管理
  • 保护/视图/管理

所以按照这个逻辑,我在 admin controllers root 中都有 ErrorController ,并且在中使用相同的结构意见目录

这就是我尝试过的,我真的很感谢帮助,所以提前谢谢你们!

1 个答案:

答案 0 :(得分:2)

你应该试试这个:

Yii::app()->setComponents(array(
    'errorHandler'=>array(
        'errorAction'=>'/admin/error'
    )
));

http://www.yiiframework.com/doc/api/1.1/CModule#setComponents-detail