用YII assets

1.assets的作用是方便模块化,插件化的,一般来说出于安全原因不允许通过url访问protected下面的文件,但是我们又希望将module单独出来,所以需要使用发布,即将一个目录下的文件复制一份到assets下面方便通过url访问

 

1 首先把自己开发模块用到的 css 或者 js 等客户端脚本,放到 modules/自己模块名/assets 目录中
   比如:modules/admin/assets

2 在自己的代码中用下面的代码 发布这些 客户端代码到公共 assets 目录
   Yii::app()->getAssetManager()->publish(Yii::getPathOfAlias('application.modules.admin.assets'));
   这个publish 方法 返回一个绝对路径,指向刚刚发布到外部 assets的目录。
   另注意:publish 方法不会重复发布内容。参考  publish方法的$forceCopy=false 参数

3 然后再模块里就可以用 使用$this->module->assetsUrl就可以调用你的css等文件了。
   注意:$this->module 是 ccontroller 的属性,代表当前控制器所属的 module。上面例子中就是 admin
   这样模块代码中就实现了充分的独立性灵活性,使得代码可以灵活复用。

 

<?php
/**
 * Admin module class
 */
class StatisticsModule extends CWebModule {
    /**
     * Default admin theme
     */
    public $theme = 'default';
    private $_assetsUrl;
    public function init() {
        // Yii::app()->theme = 'admin/' . $this->theme;
        // Set theme url
        // Yii::app()->themeManager->setBaseUrl( Yii::app()->theme->baseUrl );
        // Yii::app()->themeManager->setBasePath( Yii::app()->theme->basePath );
        // Set error handler
        //Yii::app()->errorHandler->errorAction = 'admin/error/error';
        /* Make sure we run the master module init function */
     // Yii::app()->getAssetManager()->publish($baseJsPath, false, -1, YII_DEBUG);  //使用前强制更新asset
        parent::init();
    }

    public function getAssetsUrl()
    {
    if($this->_assetsUrl===null)
        $this->_assetsUrl=Yii::app()->getAssetManager()->publish(Yii::getPathOfAlias('application.modules.statistics.assets'));
        return $this->_assetsUrl;
    }
    public function setAssetsUrl($value)
    {
        $this->_assetsUrl=$value;
    } 

}

 

posted on 2014-09-21 17:55  FreeSpider  阅读(1605)  评论(0编辑  收藏  举报