欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Yii核心組件AssetManager原理分析

 更新時(shí)間:2014年12月02日 11:14:37   投稿:shichen2014  
這篇文章主要介紹了Yii核心組件AssetManager原理分析,較為詳細(xì)的分析了AssetManager組件的原理與實(shí)現(xiàn)過程,有助于深入了解yii框架的特性,需要的朋友可以參考下

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

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

復(fù)制代碼 代碼如下:
<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后面跟著一個顯然經(jīng)過hash的文件夾路徑,同屬于jq的js代碼的路徑相同,這段代碼從何而來呢?

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

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

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

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

請注意第一個方法registerClientScript,這個方法是在CListView中實(shí)現(xiàn)的:

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

看到j(luò)query和bbp似乎離真相近了些,接下來我們看CClientScript::registerCoreScript方法:

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

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

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

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

復(fù)制代碼 代碼如下:
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處理,因此我們看到的路徑是不規(guī)則的,而由于jq系列的js代碼均在同一路徑下(都在framework/web/js/source下),所以hash值是相同的。

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

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

相關(guān)文章

  • PHP實(shí)現(xiàn)新型冠狀病毒疫情實(shí)時(shí)圖的實(shí)例

    PHP實(shí)現(xiàn)新型冠狀病毒疫情實(shí)時(shí)圖的實(shí)例

    在本篇文章小編給大家分享一篇關(guān)于PHP新型冠狀病毒肺炎疫情實(shí)時(shí)圖源碼內(nèi)容,有興趣的朋友們可以本地測試下。
    2020-02-02
  • php生成毫秒時(shí)間戳的實(shí)例講解

    php生成毫秒時(shí)間戳的實(shí)例講解

    下面小編就為大家?guī)硪黄猵hp生成毫秒時(shí)間戳的實(shí)例講解。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-09-09
  • thinkPHP實(shí)現(xiàn)將excel導(dǎo)入到數(shù)據(jù)庫中的方法

    thinkPHP實(shí)現(xiàn)將excel導(dǎo)入到數(shù)據(jù)庫中的方法

    這篇文章主要介紹了thinkPHP實(shí)現(xiàn)將excel導(dǎo)入到數(shù)據(jù)庫中的方法,涉及thinkPHP結(jié)合PHPExcel插件操作excel與數(shù)據(jù)庫的相關(guān)技巧,需要的朋友可以參考下
    2016-04-04
  • laravel返回統(tǒng)一格式錯誤碼問題

    laravel返回統(tǒng)一格式錯誤碼問題

    在使用yii和laravel的過程中,兩個框架對web-api都非常友好,也都對restful做了不同程度的支持,但是還是遇到了一些問題,下面以laravel6.4為例,簡單描述下我遇到的問題,需要的朋友參考下吧
    2019-11-11
  • thinkphp5.1驗(yàn)證碼及驗(yàn)證碼驗(yàn)證功能的實(shí)現(xiàn)詳解

    thinkphp5.1驗(yàn)證碼及驗(yàn)證碼驗(yàn)證功能的實(shí)現(xiàn)詳解

    這篇文章主要介紹了thinkphp5.1驗(yàn)證碼及驗(yàn)證碼驗(yàn)證功能的實(shí)現(xiàn)詳解,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-01-01
  • php批量刪除操作(數(shù)據(jù)訪問)

    php批量刪除操作(數(shù)據(jù)訪問)

    這篇文章主要為大家詳細(xì)介紹了php批量刪除操作,批量刪除頁面和.除處理界面,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-05-05
  • CI操作cookie的方法分析(基于helper類庫)

    CI操作cookie的方法分析(基于helper類庫)

    這篇文章主要介紹了CI操作cookie的方法,結(jié)合實(shí)例形式分析了CI使用helper類庫的cookie類庫實(shí)現(xiàn)操作cookie的相關(guān)技巧,需要的朋友可以參考下
    2016-03-03
  • php批量更改數(shù)據(jù)庫表前綴實(shí)現(xiàn)方法

    php批量更改數(shù)據(jù)庫表前綴實(shí)現(xiàn)方法

    我們經(jīng)常會遇到替換或添加數(shù)據(jù)庫表前綴的問題,通過數(shù)據(jù)庫導(dǎo)出,在記事本上批量更改,然后再導(dǎo)出,這也是一種方法,但是不夠方便
    2013-10-10
  • php計(jì)算多個集合的笛卡爾積實(shí)例詳解

    php計(jì)算多個集合的笛卡爾積實(shí)例詳解

    笛卡爾積又叫笛卡爾乘積,是一個叫笛卡爾的人提出來的。 簡單的說就是兩個集合相乘的結(jié)果。具體的定義要看看有關(guān)代數(shù)系的書的定義。這篇文章主要給大家介紹了利用php計(jì)算多個集合的笛卡爾積的方法實(shí)例,需要的朋友可以參考借鑒,下面來一起看看吧。
    2017-02-02
  • php 猴子摘桃的算法

    php 猴子摘桃的算法

    這篇文章主要介紹了php 猴子摘桃的算法,需要的朋友可以參考下
    2017-06-06

最新評論