AssetBundle - как работает?

Общие вопросы по использованию второй версии фреймворка. Если не знаете как что-то сделать и это про Yii 2, вам сюда.
Ответить
Аватара пользователя
porcelanosa
Сообщения: 570
Зарегистрирован: 2010.03.16, 04:31
Откуда: Москва

AssetBundle - как работает?

Сообщение porcelanosa »

Пытаюсь освоить Yii2 - такая проблема.
Базовый шаблон.
в assets/AppAsset.php

Код: Выделить всё

    public $depends = [
        //'yii\web\YiiAsset',
        //'yii\bootstrap\BootstrapAsset',
    ]; 
Но вижу, что все-равно грузит assets/fe664892/js/bootstrap.js и /assets/fe664892/css/bootstrap.css

Где прописывается эта загрузка?
В конфиге не нашла ничего похожего.
mcintosh-club.ru - первый мой сайт с использование Yii //
Акустика Sonus Faber Hi-End класса//
Необрезная доска и другие пиломатериалы
Ro7
Сообщения: 71
Зарегистрирован: 2013.08.17, 15:08

Re: AssetBundle - как работает?

Сообщение Ro7 »

Подключается аналогичным образом где-то в виджетах.
whisperer
Сообщения: 9
Зарегистрирован: 2014.06.07, 19:25

Re: AssetBundle - как работает?

Сообщение whisperer »

автоматически подключаются вместе с используемыми на странице виджетами, например при использовании GridView.
Если не нравиться, что там подключается при использовании GridView, можно поправить класс yii\grid\GridViewAsset. Точно так же и с другими виджетами.
Ну, или еще как вариант, переопределить бандл в конфигурации: (в доках об этом написано)

Код: Выделить всё

return [
    // ...
    'components' => [
        'assetManager' => [
            'bundles' => [
                'yii\web\JqueryAsset' => [
                     'sourcePath' => null,
                     'js' => ['//ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js']
                ],
            ],
        ],
    ],
]; 
mickgeek
Сообщения: 957
Зарегистрирован: 2014.05.31, 20:50
Откуда: Санкт-Петербург
Контактная информация:

Re: AssetBundle - как работает?

Сообщение mickgeek »

Аватара пользователя
Besedin
Сообщения: 88
Зарегистрирован: 2012.07.30, 11:09
Откуда: Kyiv

Re: AssetBundle - как работает?

Сообщение Besedin »

Есть проблемка с получением URL js-файла asset bundle.
Регистрирую AssetsBundle в layout

Код: Выделить всё

AppAsset::register($this);
 


AppAsset.php

Код: Выделить всё

class AppAsset extends AssetBundle
{
    public $basePath = '@webroot';
    public $baseUrl = '@web';
    public $css = [
        'css/main.css',
        'css/font.css',
        'css/select2.css',
        '//fonts.googleapis.com/css?family=Ubuntu:300,400&subset=latin,cyrillic-ext',
        '//fonts.googleapis.com/css?family=Ubuntu+Condensed:400&subset=latin,cyrillic-ext',
        '//fonts.googleapis.com/css?family=Roboto:300&subset=latin,cyrillic-ext'
    ];
    public $js = [
        'js/core.js',
    ];
    public $depends = [
        'yii\web\YiiAsset',
        'yii\validators\ValidationAsset',
        'yii\widgets\ActiveFormAsset',
        'app\assets\Select2Asset',
        'app\assets\CScrollbarAsset',
        'app\assets\JqueryCookieAsset',
        'app\assets\JqueryInputmaskAsset'
    ];
}
 
JqueryInputmaskAsset.php

Код: Выделить всё

namespace app\assets;

use yii\web\AssetBundle;

class JqueryInputmaskAsset extends AssetBundle
{
    public $sourcePath = '@bower/jquery.inputmask';
    public $js = [
        'dist/jquery.inputmask.bundle.js',
        'js/phone-codes/phone-codes.js'
    ];
    public $depends = [
        'yii\web\JqueryAsset',
    ];
}
 
В одной из вьюх пробую получить URL js-файла бандла

Код: Выделить всё

Yii::$app->assetManager->getAssetUrl(
        JqueryInputmaskAsset::className(),
        'js/phone-codes/phone-codes.js'
    )
 
но он возвращает мне только js/phone-codes/phone-codes.js вместо /assets/a26b984f/js/phone-codes/phone-codes.js

Что я делаю не так?
Аватара пользователя
Besedin
Сообщения: 88
Зарегистрирован: 2012.07.30, 11:09
Откуда: Kyiv

Re: AssetBundle - как работает?

Сообщение Besedin »

Разобрался. Надо было так

Код: Выделить всё

Yii::$app->assetManager->getAssetUrl(Yii::$app->assetManager->getBundle(JqueryInputmaskAsset::className()), 'js/phone-codes/phone-codes.js')
 
Ответить