Php Yii-使缩小可配置的最佳方法

Php Yii-使缩小可配置的最佳方法,php,inheritance,yii,Php,Inheritance,Yii,我在我的网站上使用Javascript和CSS缩小扩展。我的protected/config/main.php中有以下代码 'clientScript'=>array( 'class'=>'ext.minScript.components.ExtMinScript', ) 在其中一个模块中,我需要定制CClientScript类的实现。所以我创建了一个新类,并从ExtMinScript派生它,如下所示 class BaseClientScript extends ExtMi

我在我的网站上使用Javascript和CSS缩小扩展。我的protected/config/main.php中有以下代码

'clientScript'=>array(
    'class'=>'ext.minScript.components.ExtMinScript',
)
在其中一个模块中,我需要定制CClientScript类的实现。所以我创建了一个新类,并从ExtMinScript派生它,如下所示

class BaseClientScript extends ExtMinScript
在模块初始化代码中,我使用setComponent从主配置“覆盖”了“clientScript”组件。因此,我从ExtMinScript获得了缩小实现,并在BaseClientScript中获得了我的实现

class BaseClientScript extends CClientScript
如果我想在模块中禁用缩小功能,我会将代码更改为从CClientScript派生BaseClientScript

class BaseClientScript extends CClientScript
现在我希望缩小可以在主配置中配置。(protected/config/main.php)

我可以创建两个类,一个来自CClientScript,另一个来自ExtMinScript。(BaseClientScript和BaseClientScript) 我不想这样做,因为这意味着我在两个类中复制了我的自定义客户端脚本实现


有没有更好的方法来处理这种情况?

使用以下技巧:

 define('MinClientScriptClass', 'CClientScript');
当您想在protected/config/main.php中使用缩小时

'clientScript'=>array(
    'class'=>'ext.minScript.components.ExtMinScript',
)
并在BaseClientScript中编写:

if (defined('MinClientScriptClass')) {

    class MinClientScriptClass extends CClientScript {}

} else {

    class MinClientScriptClass extends ExtMinScript {}
}

class BaseClientScript extends MinClientScriptClass
注意:如果要禁用缩小功能,只需在主配置中注释define。或者在main.php中使用config参数,如果在上面,则在中检查config true/false值