3

在 Yii 的 config.php 中,我们有这样一条语句,它声明了哪个 Controller 是应用程序中的默认且唯一的一个 Error-Handler:

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

所以,我需要actionError()在我的SiteController下有一个,以便在我的站点中预览错误,但这不是我真正需要的。

我正在尝试在扩展基础的自定义控制器(Yii 的基础控制器)Yii::app()->errorHandler->errorAction中即时更改。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控制器 root中都有ErrorController,并且在views directory中具有相同的结构。

这就是我所尝试的,我非常感谢帮助,所以提前谢谢大家!

4

1 回答 1

2

你应该试试这个:

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

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

于 2013-05-07T11:58:50.153 回答