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 プログラムの設計に役立つことを願っています。
http://www.bkjia.com/PHPjc/920610.htmlwww.bkjia.comtruehttp://www.bkjia.com/PHPjc/920610.html技術記事 Yii コアコンポーネント AssetManager、yiiassetmanager の原理の分析 この記事では、yii に付属するデモブログプログラムを通じて Yii コアコンポーネント AssetManager を分析します。CSS と JavaScript を自動的にロードできます...
。