Привет, я хотел узнать о преимуществах регистрации Asset Bundle после процесса, описанного в документах, таких как Process one in AppAsset.php
public $js = [ 'js/myjsfile.js' ];
затем в файле вида, добавляющем пространство имен, например
namespace app\assets;
и затем добавить оператор использования, например
use app\assets\AppAsset; AppAsset::register($this);
Вместо того, чтобы делать все это, если я использую Process Two
$this->registerJs('js/myjsfile.js', $this::POS_READY);
он отлично работает. Итак, почему я должен использовать Process One .
Благодарю.
Одной из основных причин использования Asset Bundle является то, что пути ваших активов всегда будут правильными. Рассматривать:
$this->registerJsFile('js/myjsfile.js', ['position'=>$this::POS_READY]);
будет генерировать что-то вроде:
<script src="js/myjsfile.js"></script>
Что отлично подходит для URL-адресов, не поддерживаемых urlManager, например http://localhost/yiiproject/index.php?r=user/update&id=8
потому что ваш браузер ищет файл js по адресу: /yiiproject/js/myjsfile.js
Но если вы включите urlManager, ваш url будет выглядеть как http://localhost/yiiproject/user/update/8
, что означает, что ваш браузер будет искать ваш файл js по адресу: /yiiproject/user/update/8/js/myjsfile.js
.
Вы можете решить эту проблему, используя:
$this->registerJsFile(Yii::$app->request->baseUrl.'/js/myjsfile.js', ['position'=>$this::POS_READY]);
Но Asset Bundle в основном делает это для вас.
Asset Bundles имеют некоторые преимущества перед нормальной регистрацией. Помимо того, что сказал @deacs в своем ответе, это другие:
Все функции, обеспечивающие блеск пакетов, находятся в документах
Используя Asset Bundles, вы также можете получить последнюю версию из папки «vendor», поэтому, если вам нужно обновить некоторую библиотеку, вам не нужно вручную это делать, поскольку композитор уже делает это.