Расположение 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