ホームページ  >  記事  >  バックエンド開発  >  Yii コアコンポーネント AssetManager の原理分析、yiiassetmanager_PHP チュートリアル

Yii コアコンポーネント AssetManager の原理分析、yiiassetmanager_PHP チュートリアル

WBOY
WBOYオリジナル
2016-07-13 10:12:39827ブラウズ

Yii コアコンポーネント AssetManager の原理分析、yiiassetmanager

この記事では、yii に付属するデモブログ プログラムを使用して、Yii のコアコンポーネントである AssetManager を分析します。このプログラムは CSS と JavaScript を自動的にロードでき、必要なコードは 1 行だけです。具体的な分析は次のとおりです:

ブログのホームページを開くと、js を導入する次の HTML コードが表示されます:

コードをコピーします コードは次のとおりです:



これらの js ファイルのパスはすべて、assets フォルダーの下にあり、jq に属する js コードのパスは同じです。

ビューファイルを直接見ると、jsを導入するコードが見えないので、ウィジェットを使用して導入する必要があります:

コードをコピーします コードは次のとおりです:
$this->widget('zii.widgets.CListView', array(
) 'dataProvider'=>$dataProvider,
'itemView'=>'_view',
'テンプレート'=>"{アイテム}n{ページャー}",
));
?>
このウィジェットは 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);
}
これは実際には主に最終ページでレンダリングされる js を記録し、実際にレンダリングされた URL は getCoreScriptUrl メソッドを通じて生成されます:

コードをコピーします コードは次のとおりです:
public function getCoreScriptUrl()
{
if($this->_baseUrl!==null)
return $this->_baseUrl;
それ以外
return $this->_baseUrl=Yii::app()->getAssetManager()->publish(YII_PATH.'/web/js/source');
}
次に、公開の具体的なプロセスを見てみましょう:

コードをコピーします コードは次のとおりです:
public function public function public ($path,$hashByName=false,$level=-1,$forceCopy=false)
{
if(is_file($src))
{
$dir=$this->hash($hashByName ? Basename($src) : dirname($src));
$fileName=ベース名($src);

else if(is_dir($src))
{
$dir=$this->hash($hashByName ? Basename($src) : $src);
$dstDir=$this->getBasePath().DIRECTORY_SEPARATOR.$dir;

}

ここではパスがハッシュ化されているため、表示されるパスは不規則であり、jq シリーズの js コードはすべて同じパス下 (すべて Framework/web/js/source 配下) にあるため、ハッシュ値は同一です。

さらに、上記に加えて、CAssetManager を使用すると、複数のモジュールが同じコードを再利用できます。CAssetManager を使用するもう 1 つの利点は、実際のコードを保護されたパスに配置し、オンデマンドでロードすることでセキュリティを分離できることです。

この記事が、皆さんの yii フレームワークに基づく PHP プログラムの設計に役立つことを願っています。

www.bkjia.comtru​​ehttp://www.bkjia.com/PHPjc/920610.html技術記事 Yii コアコンポーネント AssetManager、yiiassetmanager の原理の分析 この記事では、yii に付属するデモブログプログラムを通じて Yii コアコンポーネント AssetManager を分析します。CSS と JavaScript を自動的にロードできます...
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。