Например, я создал новую страницу, и я хотел бы использовать, например, backbone.js, пользовательский файл css и некоторую коллекцию изображений. Где я должен объявить все это в Yii2? Я нашел модуль AppAsset.php, но это только для файлов css / js, и я не заметил никаких изменений, когда мои файлы css / js и путь были объявлены там:
class AppAsset extends AssetBundle { public $basePath = '@webroot'; public $baseUrl = '@web'; public $css = [ 'css/site.css', 'js/jquery.mobile-1.4.2.min.css', ]; public $js = [ 'js/jsquery-2.1.0.min.js', 'js/jquery.mobile-1.4.2.min.js', 'js/script.js', ]; public $depends = [ 'yii\web\YiiAsset', 'yii\bootstrap\BootstrapAsset', ]; }
Что я делаю не так?
Мне потребовалось некоторое время, чтобы понять это, но ниже – соответствующая часть исходного кода Yii2
if ($this->sourcePath !== null && !isset($this->basePath, $this->baseUrl)) { list ($this->basePath, $this->baseUrl) = $am->publish($this->sourcePath, $this->publishOptions); }
Поэтому Yii2 будет публиковать активы только в том случае, если установлен параметр $sourcePath
, а $basePath
и $baseUrl
не установлены (!). Последний опрокинул меня, и похоже, что то же самое касается вас.
Итак, у меня есть этот AppAsset, который должным образом публикует
use yii\web\AssetBundle; class AppAsset extends AssetBundle { public $sourcePath = '@app/assets/app'; public $css = [ 'css/openbook.css', 'fontello/css/fontello.css', 'fontello/css/animation.css' ]; public $js = [ 'js/plug.openbook.js', 'js/plug.interpret.js', 'js/plug.drop.message.js' ]; public $depends = [ // 'yii\web\YiiAsset', // 'yii\bootstrap\BootstrapAsset', ]; }
Конечно, у меня в главном макете
use frontend\assets\AppAsset; ... AppAsset::register($this);
для использования этого AppAsset или любого другого вы должны зарегистрировать его в представлении
use app\assets\AppAsset; AppAsset::register($this);
Из личного опыта активы являются одной из частей Yii, которые я считаю крайне расстраивающей.
Трудно надежно узнать, где будет файл, и включение и отключение в режиме отладки приведет к дальнейшему разочарованию.
Я предлагаю отказаться от обработки активов и просто сохранить все ваши JS-файлы в папке, тогда он может быть включен следующим образом:
Yii::app()->clientScript->registerScriptFile('/js/jquery.jeditable.mini.js');