亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 開發 > PHP > 正文

Yii核心組件AssetManager原理分析

2024-05-04 23:28:27
字體:
來源:轉載
供稿:網友
這篇文章主要介紹了Yii核心組件AssetManager原理分析,較為詳細的分析了AssetManager組件的原理與實現過程,有助于深入了解yii框架的特性,需要的朋友可以參考下
 
 

本文我們通過yii自帶的demo-blog程序來分析Yii核心組件AssetManager,他可以自動加載css和javascript,并且只需要一句代碼即可。具體分析如下:

打開blog的首頁,會看到如下的引入js的html代碼:

復制代碼代碼如下:
<link rel="stylesheet" type="text/css" href="/yii/demos/blog/assets/d6bb6ebe/highlight.css" />
<link rel="stylesheet" type="text/css" href="/yii/demos/blog/assets/c2e28f0f/pager.css" />
<script type="text/javascript" src="/yii/demos/blog/assets/d6112c6a/jquery.min.js"></script>
<script type="text/javascript" src="/yii/demos/blog/assets/d6112c6a/jquery.ba-bbq.js"></script>

 

這些js文件的路徑都在assets文件夾下,assets后面跟著一個顯然經過hash的文件夾路徑,同屬于jq的js代碼的路徑相同,這段代碼從何而來呢?

直接看view文件看不到任何引入js的代碼,因此應該是使用widget引入的:

 

復制代碼代碼如下:
<?php
$this->widget('zii.widgets.CListView', array(
'dataProvider'=>$dataProvider,
'itemView'=>'_view',
'template'=>"{items}n{pager}",
));
?>

 

這個widget也是yii自帶的zii擴展,于是乎我們可以找到zii的CListView代碼,而CListView又是繼承CBaseListView,因此先看CBaseListView的run方法:

 

復制代碼代碼如下:
public function run()
{
$this->registerClientScript();
echo CHtml::openTag($this->tagName,$this->htmlOptions)."n";
$this->renderKeys();
$this->renderContent();
echo CHtml::closeTag($this->tagName);
}

 

請注意第一個方法registerClientScript,這個方法是在CListView中實現的:

 

復制代碼代碼如下:
public function registerClientScript()
{
……
$cs=Yii::app()->getClientScript();
$cs->registerCoreScript('jquery');
$cs->registerCoreScript('bbq');
……
}

 

看到jquery和bbp似乎離真相近了些,接下來我們看CClientScript::registerCoreScript方法:

 

復制代碼代碼如下:
public function registerCoreScript($name)
{
$this->_hasScripts=true;
$this->_coreScripts[$name]=$name;
$params=func_get_args();
$this->recordCachingAction('clientScript','registerCoreScript',$params);
}

 

這里其實主要是記錄了最終頁面要render的js,而實際生成render的url是通過getCoreScriptUrl方法:

 

復制代碼代碼如下:
public function getCoreScriptUrl()
{
if($this->_baseUrl!==null)
return $this->_baseUrl;
else
return $this->_baseUrl=Yii::app()->getAssetManager()->publish(YII_PATH.'/web/js/source');
}

 

接下來我們看看publish的具體過程:

 

復制代碼代碼如下:
public function publish($path,$hashByName=false,$level=-1,$forceCopy=false)
{
if(is_file($src))
{
$dir=$this->hash($hashByName ? basename($src) : dirname($src));
$fileName=basename($src);
……
else if(is_dir($src))
{
$dir=$this->hash($hashByName ? basename($src) : $src);
$dstDir=$this->getBasePath().DIRECTORY_SEPARATOR.$dir;
……
}

 

這里通過對路徑做了hash處理,因此我們看到的路徑是不規則的,而由于jq系列的js代碼均在同一路徑下(都在framework/web/js/source下),所以hash值是相同的。

另外,除了如上所述,CAssetManager使得多個模塊可以復用相同的代碼制外,使用CAssetManager的另外一個好處是安全隔離,將真實的代碼放在受保護的路徑下,按需加載。

希望本文所述對大家基于yii框架的PHP程序設計有所幫助。


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
色综合久久中文字幕综合网小说| 欧美成人精品三级在线观看| 久久综合久中文字幕青草| 久久久爽爽爽美女图片| 亚洲free性xxxx护士hd| 亚洲国产精品va在线观看黑人| 黄色精品在线看| 亚洲色图18p| 日韩av网站导航| 日韩中文在线中文网在线观看| 欧美成人精品三级在线观看| 亚洲欧美综合区自拍另类| 亚洲成年人在线| 国产精品极品美女粉嫩高清在线| 亚洲午夜色婷婷在线| 精品美女国产在线| 欧洲亚洲在线视频| 国产精品无码专区在线观看| 亚洲成人亚洲激情| 91经典在线视频| 91九色视频在线| 91精品视频播放| 国模吧一区二区三区| 欧美成人黄色小视频| 国产精品综合不卡av| 日韩成人久久久| www.久久久久久.com| 亚洲精品美女在线| 国模吧一区二区| 韩国三级日本三级少妇99| 77777亚洲午夜久久多人| 精品亚洲aⅴ在线观看| 亚洲国产精品系列| 播播国产欧美激情| 视频在线一区二区| 亚洲最大成人免费视频| 精品国产一区久久久| 精品久久久久久中文字幕| 91免费国产视频| 日韩精品亚洲视频| 51精品国产黑色丝袜高跟鞋| 国产精品视频区1| 欧美亚洲一区在线| 久久综合88中文色鬼| 中文字幕在线国产精品| 亚洲人成77777在线观看网| 国产精品激情av电影在线观看| 另类色图亚洲色图| 91久久国产精品91久久性色| 久久久久久久电影一区| 欧美激情喷水视频| 国产精品1区2区在线观看| 午夜精品久久久久久久久久久久久| 国内精品美女av在线播放| 日韩精品在线免费播放| 久久的精品视频| 91精品国产综合久久久久久蜜臀| 久久九九精品99国产精品| 日韩成人中文字幕| 日韩中文字幕在线精品| 欧美二区乱c黑人| 久久精品2019中文字幕| 国产一区二区日韩精品欧美精品| 日韩成人激情影院| 日韩极品精品视频免费观看| 欧美国产视频日韩| 国产一区二区欧美日韩| 亚洲欧美国产日韩天堂区| 日韩成人在线观看| 国产拍精品一二三| 91美女福利视频高清| www.色综合| 国产欧美精品一区二区三区介绍| 激情成人中文字幕| 国产精品久久久久久久美男| 青青久久av北条麻妃海外网| 欧美老女人www| 国产成人av网| 亚洲精品成人久久电影| 国产在线拍揄自揄视频不卡99| 日韩欧美国产骚| 久久久噜噜噜久久中文字免| 97人洗澡人人免费公开视频碰碰碰| 久久影院中文字幕| 色婷婷av一区二区三区久久| 亚洲欧美日韩一区二区三区在线| 国产精品av网站| 宅男66日本亚洲欧美视频| 欧美综合一区第一页| 欧美日韩国产区| 97国产精品视频| 日韩精品欧美国产精品忘忧草| 日韩精品电影网| 国模吧一区二区三区| 国产精品嫩草视频| 中文字幕亚洲激情| 亚洲精品美女在线观看播放| 亚洲肉体裸体xxxx137| 色综合导航网站| 欧美激情精品久久久久久大尺度| 欧美大片免费观看在线观看网站推荐| 亚洲色无码播放| 国产精品福利无圣光在线一区| 亚洲一区二区久久久| 日韩成人黄色av| 国产精品成久久久久三级| 91免费看国产| 亚洲午夜av久久乱码| 欧美大全免费观看电视剧大泉洋| 欧美日韩在线视频观看| 欧美激情一级精品国产| 日韩精品免费视频| 亚洲一区二区久久| 国产主播喷水一区二区| www.国产精品一二区| 中文字幕日本欧美| 久久亚洲国产成人| 国内精品久久久| 久久影视电视剧免费网站清宫辞电视| 精品偷拍一区二区三区在线看| 在线视频免费一区二区| 欧美性极品少妇精品网站| 亚洲国产精品电影| y97精品国产97久久久久久| 亚洲影院色在线观看免费| 久久国产精品网站| 久久久久久久爱| 欧美成人精品不卡视频在线观看| 日韩精品免费在线视频观看| 欧美高清视频免费观看| 国产成人精品电影| 日韩亚洲精品电影| 久久亚洲精品成人| 一级做a爰片久久毛片美女图片| 亚洲国产古装精品网站| 亚州成人av在线| 国产精品高潮在线| 亚洲成年人在线播放| 亚洲成人a**站| 欧美一区三区三区高中清蜜桃| 国产91九色视频| 亚洲精品98久久久久久中文字幕| 欧美成人中文字幕在线| 91po在线观看91精品国产性色| 亚洲国产精品va在看黑人| 在线播放国产一区中文字幕剧情欧美| 亚洲成av人片在线观看香蕉| www.99久久热国产日韩欧美.com| 91精品国产91久久久久| 日韩中文在线中文网在线观看| 欧美高清在线观看| 精品精品国产国产自在线| 久久精品色欧美aⅴ一区二区| 北条麻妃99精品青青久久| 亚洲影院色在线观看免费| 日本精品久久久| 91在线观看欧美日韩| 欧美性高潮床叫视频| 国语自产精品视频在线看一大j8| 亚洲永久免费观看| 91av视频在线| 国产成人久久久精品一区| 国产精品一区二区三区免费视频| 国产精品久久久久久久久久|