Как управлять активами в Yii2?

Например, я создал новую страницу, и я хотел бы использовать, например, 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');