Подтвердить что ты не робот

Как управлять активами в 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',
    ];
}

Что я делаю неправильно?

4b9b3361

Ответ 1

Мне потребовалось некоторое время, чтобы понять это, но ниже соответствующая часть исходного кода 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);

Ответ 2

чтобы использовать этот AppAsset или любой другой, вы должны зарегистрировать его в представлении

use app\assets\AppAsset;
AppAsset::register($this);

Ответ 3

Сначала вы должны создать класс SomeAsset в своей папке app/assets/с вашими новыми js и css файлами. Вы можете расширить свой AppAsset, перегружая его свойства.

Затем используйте это в SomeController

use Yii;
use app\assets\SomeAsset;

и в действии. Примерно так:

SomeAsset::register(Yii::$app->view);

Ответ 4

Из личного опыта активы являются одной из частей Yii, которые я считаю крайне расстраивающей.

Трудно надежно узнать, где будет файл, и включение и отключение в режиме отладки приведет к дальнейшему разочарованию.

Я предлагаю отказаться от обработки активов и просто сохранить все ваши JS файлы в папке, тогда он может быть включен следующим образом:

Yii::app()->clientScript->registerScriptFile('/js/jquery.jeditable.mini.js');