In diesem Artikel wird hauptsächlich die Analyse des Prinzips von AssetManager, der Kernkomponente von Yii, vorgestellt. Er analysiert das Prinzip und den Implementierungsprozess der AssetManager-Komponente detaillierter, was zu einem tieferen Verständnis der Eigenschaften von führt yii-Framework. Freunde in Not können sich darauf beziehen
In diesem Artikel verwenden wir das Demo-Blog-Programm, das mit yii geliefert wird, um die Kernkomponente AssetManager von Yii zu analysieren. Es kann automatisch CSS und Javascript laden und erfordert nur eine Zeile Code. Die spezifische Analyse lautet wie folgt:
Öffnen Sie die Homepage des Blogs und Sie sehen den folgenden HTML-Code, der js einführt:
<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>
Die Pfade dieser js-Dateien befinden sich alle in den Assets Auf Ordner und Assets folgt ein offensichtlicher Hash-Ordnerpfad, der mit dem Pfad des js-Codes von jq übereinstimmt. Woher kommt dieser Code?
Wenn Sie sich die Ansichtsdatei direkt ansehen, können Sie' Es gibt keinen Code, der js einführt, daher sollten Sie Widgets verwenden. Eingeführt:
<?php $this->widget('zii.widgets.CListView', array( 'dataProvider'=>$dataProvider, 'itemView'=>'_view', 'template'=>"{items}n{pager}", )); ?>
Dieses Widget ist auch eine Zii-Erweiterung, die mit Yii geliefert wird, sodass wir den CListView-Code von Zii finden können, und CListView erbt CBaseListView, also Schauen Sie sich zuerst die Ausführungsmethode von CBaseListView an:
public function run() { $this->registerClientScript(); echo CHtml::openTag($this->tagName,$this->htmlOptions)."n"; $this->renderKeys(); $this->renderContent(); echo CHtml::closeTag($this->tagName); }
Bitte achten Sie auf die erste Methode registerClientScript. Diese Methode ist in CListView implementiert:
public function registerClientScript() { …… $cs=Yii::app()->getClientScript(); $cs->registerCoreScript('jquery'); $cs->registerCoreScript('bbq'); …… }
Da jquery und bbp näher an der zu sein scheinen Um ehrlich zu sein, schauen wir uns die Methode CClientScript::registerCoreScript an:
public function registerCoreScript($name) { $this->_hasScripts=true; $this->_coreScripts[$name]=$name; $params=func_get_args(); $this->recordCachingAction('clientScript','registerCoreScript',$params); }
Hier zeichnen wir hauptsächlich die js auf, die auf der letzten Seite gerendert werden sollen, und die tatsächlich gerenderte URL wird über die Methode getCoreScriptUrl generiert:
public function getCoreScriptUrl() { if($this->_baseUrl!==null) return $this->_baseUrl; else return $this->_baseUrl=Yii::app()->getAssetManager()->publish(YII_PATH.'/web/js/source'); }
Als nächstes werfen wir einen Blick auf den spezifischen Prozess der Veröffentlichung:
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; …… }
Der Pfad ist hier gehasht, daher ist der Pfad, den wir sehen, unregelmäßig, und da sich der js-Code der jq-Serie alle unter demselben Pfad befindet (alles unter Framework/web/js/source), der Hash Die Werte sind gleich.
Zusätzlich zu den oben genannten Punkten ermöglicht CAssetManager mehreren Modulen die Wiederverwendung desselben Codes. Ein weiterer Vorteil der Verwendung von CAssetManager ist die Sicherheitsisolation, bei der der echte Code in einem geschützten Pfad platziert wird. Klicken Sie auf „Muss geladen werden“.
Das Obige ist der gesamte Inhalt dieses Artikels. Ich hoffe, er wird für das Studium aller hilfreich sein. Weitere verwandte Inhalte finden Sie auf der chinesischen PHP-Website.
Verwandte Empfehlungen:
Über die Nutzungsanalyse der benutzerdefinierten Serialisierungsschnittstelle Serializable von PHP
Über die Prinzipien der Mehrspieler-Modulentwicklung in PHP
Das obige ist der detaillierte Inhalt vonPrinzipielle Analyse der Yii-Kernkomponente AssetManager. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!