Расположение Yii2 из зависимостей в пользовательском активе

У меня есть путь что-то вроде / actions / users / someaction во внешнем интерфейсе, и я хочу использовать Bootstrap-Asset (расположенный в /backend/web/assets/xxxxxx/) из внутреннего интерфейса.

Поэтому я создал ресурс под названием "ActionAsset" со следующим содержанием:

class ActionAsset extends AssetBundle
{
    public $basePath = '@backend';
    public $baseUrl = '@web/backend';
    public $css = [
        'css/external.css',
        'css/overwrite-bootstrap.css',
    ];
    public $js = [
    ];
    public $depends = [
        'yii\web\YiiAsset',
        'yii\bootstrap\BackendBootstrapAsset',
    ];
}

Включенный css просто отлично работает, но зависимости всегда сохраняются в /frontend/web/assets/. Мой вопрос (и я действительно искал недели), как изменить это местоположение на /backend/web/assets.

Спасибо!

1 ответ

Решение

Вам нужно определить $sourcePath, Yii2 AssetManager скопирует (или символическую ссылку) ваши активы в вашу текущую сеть /assets/ папку.

Из документов

sourcePath: указывает корневой каталог, содержащий файлы ресурсов в этом комплекте. Это свойство должно быть установлено, если корневой каталог не доступен через Интернет. В противном случае вам следует установить свойство basePath и baseUrl. Псевдонимы пути могут быть использованы здесь.

Поэтому измените свой код на:

class ActionAsset extends AssetBundle
{
    public $sourcePath = '<path to your asste content>';
    public $css = [
        'css/external.css',
        'css/overwrite-bootstrap.css',
    ];
    public $js = [
    ];
    public $depends = [
        'yii\web\YiiAsset',
        'yii\bootstrap\BackendBootstrapAsset',
    ];
}

Или: просто перезаписать ваш asstetbundle в @frontend/asset и установить $sourcePath свойство соответственно:

class FrontendActionAsset extends ActionAsset
{
    public $sourcePath = '<path to your asste content>'; //you don't need more
}

Публикация активов. Как упоминалось выше, если набор ресурсов расположен в каталоге, который недоступен в Интернете, его ресурсы будут скопированы в каталог в Интернете при регистрации пакета в представлении. Этот процесс называется публикацией активов и выполняется менеджером активов автоматически.

По умолчанию ресурсы публикуются в каталоге @webroot/assets, который соответствует URL-адресу @web/assets. Вы можете настроить это расположение, настроив свойства basePath и baseUrl.

Вместо публикации ресурсов путем копирования файлов вы можете рассмотреть возможность использования символических ссылок, если ваша ОС и веб-сервер позволяют. Эту функцию можно включить, установив для linkAssets значение true.

return [
    // ...
    'components' => [
        'assetManager' => [
            'linkAssets' => true,
        ],
    ],
];

С приведенной выше конфигурацией менеджер активов создаст символическую ссылку на исходный путь пакета ресурсов при его публикации. Это быстрее, чем копирование файлов, а также может гарантировать, что опубликованные ресурсы всегда актуальны.

https://www.yiiframework.com/doc/guide/2.0/en/structure-assets

Другие вопросы по тегам