Есть ли способ заставить Yii2 перезагружать ресурсы модуля при каждом запросе?

Мой сайт разделен на отдельные модули. У каждого модуля есть свои файлы css или js.
Yii assetsManager создает папку, когда я впервые открываю страницу, которая использует мои ресурсы.

К сожалению, если я что-то изменяю в своих файлах, Yii 1.x не перезагружает мои файлы css или js.

Мне нужно вручную удалить папку web/assets. Это действительно раздражает, когда вы разрабатываете приложение.

Это работает, когда я добавляю модуль во внутреннюю папку, но не когда я создаю модуль в папке поставщика со своим собственным пространством имен.


person Ruben    schedule 31.07.2014    source источник


Ответы (3)


Что касается Yii1.x. С assetManager вы можете сделать это, установив для атрибута «forceCopy» значение true в вашем файле конфигурации.

... скопируйте файлы ресурсов и каталоги, даже если они уже были опубликованы ранее. Это свойство используется только на этапе разработки

Дополнительную информацию см. в документации по forceCopy здесь.

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

Что касается второй части вопроса, я предполагаю, что это в Yii 2.x, вы должны использовать AssetBundles, вы можете зарегистрировать любой пакет пространства имен из любого места, вы просто регистрируете его в представлении с чем-то вроде этого

use vendor\myVendorName\myPackageName\assets\AppAsset;
AppAsset::register($this);
person Manquer    schedule 01.08.2014
comment
у вас есть пример для linkAssets? - person Ruben; 26.09.2014
comment
Добавил в компоненты основного конфига эту строчку: 'assetManager' =› ['linkAssets' =› true,], спасибо - person Ruben; 30.09.2014

В Yii2 вы можете добавить метку времени к URL-адресам ресурсов, подобных этому...

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

Это не заставит активы перезагружаться при каждом запросе, но всякий раз, когда файл актива изменяется, URL-адрес будет меняться из-за метки времени, и это приведет к повторной публикации актива.

person Pedro    schedule 18.02.2015
comment
также см. мой комментарий к ответу Манкера - person Ruben; 18.02.2015
comment
Этот подход рекомендуется в документации Yii2 и заставляет браузер перезагружать измененный ресурс из-за измененного URL-адреса. Измененный файл в конце ссылки может не перезагружаться браузером. Я лично избегаю использования ссылок, потому что они не всегда разрешены на хостах, на которые я развертываю. - person Pedro; 18.02.2015
comment
@Pedro Педро, в вашем фрагменте кода есть опечатка? Я использовал его в common/config/main.php, но он вызывает ошибку о Setting unknown property: yii\web\AssetManager::appendTimestamp? - person SaidbakR; 24.06.2015
comment
Этот фрагмент был скопирован непосредственно из документации Yii2... yiiframework.com/doc-2.0/ - person Pedro; 24.06.2015

Вы можете установить forceCopy = true.

class Assets extends AssetBundle{

    public function init()
    {
        parent::init();
        $this->publishOptions['forceCopy'] = true;
    }
}
person SasHok    schedule 15.04.2015