爲何用YII assetsphp
1.assets的做用是方便模塊化,插件化的,通常來講出於安全緣由不容許經過url訪問protected下面的文件 ,可是咱們又但願將module單獨出來,因此須要使用發佈,即將一個目錄下的文件複製一份到assets下面方便經過url訪問css
$assets = Yii::getPathOfAlias('ext').'/css'; //$baseUrl = Yii::app()->getAssetManager()->publish($assets); $baseUrl = Yii::app()->assetManager->publish($assets); //extensions/css發佈到assets的建立一個隨機不衝突的文件夾下 Yii::app()->clientScript->registerCssFile($baseUrl.'/main.css');//引用assets下面的main.css
2.若是一個模塊須要添加使用資源,直接從webroot中引用添加便可。
可是試圖建立一個模塊可以在任何地方引用,且資源獨立並可以避免命名衝突 。
你如何保證你的文件名不會與一些零散的應用程序的嘗試使用相同名稱的文件衝突,對於js,images,css也同樣。
經過CAssetManager,Yii::app()->assetManager可以自動的將私有資源publish到公共目錄下webroot/assetsweb
下面以admin module爲例安全
一、把須要用到的資源放在modules/admin/assets下。app
二、而後經過 CAssetManager,Yii::app()->assetManager可以自動的將私有資源publish到公共目錄下 網站目錄/assets模塊化
三、Yii會自動在網站目錄的/assets下建立一個隨機不衝突的文件夾,如2b31b42b,並把你的modules/admin/assets目錄下的文件拷貝過去。網站
經過以下代碼得到,修改protected\modules\admin\AdminModule.php文件,this
<?php class AdminModule extends CWebModule { private $_assetsUrl; public function getAssetsUrl() { if($this->_assetsUrl===null) $this->_assetsUrl=Yii::app()->getAssetManager()->publish(Yii::getPathOfAlias('application.modules.admin.assets')); return $this->_assetsUrl; } public function setAssetsUrl($value) { $this->_assetsUrl=$value; } }
而後,在/protected/modules/admin/views/layouts/main.php中 使用$this->module->assetsUrl就能夠調用你的css等文件了。url
<link rel="stylesheet" type="text/css" href="<?php echo $this->module->assetsUrl; ?>/css/screen.css"/>
使用前強制更新asset插件
$baseJsUrl = Yii::app()->getAssetManager()->publish($baseJsPath, false, -1, YII_DEBUG);