全局注册ClientScript的最佳方式?

Nic*_*_NY 4 yii

我想全局注册用户脚本,以便在整个站点上可用.现在我插入控制器中的每个动作:

Yii::app()->clientScript->registerScriptFile(Yii::app()->baseUrl . '/js/script.js');
Run Code Online (Sandbox Code Playgroud)

但我真的明白,这不是好方法......

bri*_*iiC 6

如果您期待在项目中使用主题,我会在布局文件中放置一些CSS和脚本(views/layouts/my-layout-file.php).因为如果您更改主题,您将使用另一个css,有时可能是另一个脚本,因此您不希望将它们混合在一起.

但是一些主要的css和scipts,没有改变主题,我会放入主控制器(protected/components/Controller.php)和所有其他控制器(/ protected/controllers /)将扩展此类控制器

class PageController extends Controller {
Run Code Online (Sandbox Code Playgroud)

因此,如果所有控制器都在父类上使用,则可以只编辑父类并添加类似的内容

public function beforeRender( $view ) {
    ...
    Yii::app()->clientScript->registerScriptFile(Yii::app()->baseUrl . '/js/script.js');
    ...
    return true;
}
Run Code Online (Sandbox Code Playgroud)

现在您的所有操作都将使用相同的脚本.

编辑:@realtebo(在评论)指出,使用" beforeRender "而不是"beforeAction".

了解更多:了解视图渲染流程