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

Мой сайт разделен на отдельные модули. Каждый модуль имеет свои собственные файлы css или js в /protected/modules/my_module/assets/css или js для js-файлов. Менеджер активов Yiis создает папку, когда я впервые использую страницу, использующую мои активы. К сожалению, если я изменяю sth в своих файлах – Yii не перезагружает мой файл css или js. Мне нужно вручную удалить папку /projects/assets . Это очень раздражает, когда вы разрабатываете приложение.

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

В components/Controller.php добавьте следующее (или настройте существующее beforeAction ):

 protected function beforeAction($action){ if(defined('YII_DEBUG') && YII_DEBUG){ Yii::app()->assetManager->forceCopy = true; } return parent::beforeAction($action); } 

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

См .: http://www.yiiframework.com/doc/api/1.1/CAssetManager#forceCopy-detail

Я не тестировал это, но, основываясь на документации, я считаю, что она должна работать нормально.

Примечание. Размещение этого кода внутри beforeAction является лишь примером того, куда его поместить. Вам просто нужно установить для свойства forceCopy значение true перед любыми вызовами publish() , и его размещение в beforeAction должно выполнить эту цель.

Если вы используете Yii2, через конфигурацию есть гораздо более простое решение.

Добавьте в 'config/web.php' :

 if (YII_ENV_DEV) { // configuration adjustments for 'dev' environment // ... $config['components']['assetManager']['forceCopy'] = true; } 

Это заставляет AssetManager копировать все папки при каждом запуске.

Альтернативным решением является публикация ваших активов модуля следующим образом:

 Yii::app()->assetManager->publish($path, false, -1, YII_DEBUG); 

Четвертый параметр обеспечивает копирование ваших активов, даже если они уже опубликованы. Подробнее см. В руководстве по публикации () .

Переиздание активов по каждому запросу потенциально занимает много ресурсов и является неосновательным для разработки.

  • Для разработки гораздо проще использовать функцию linkAssets в CClientScript. Активы публикуются как символические каталоги ссылок и никогда не должны восстанавливаться. См .: http://www.yiiframework.com/doc/api/1.1/CAssetManager#linkAssets-detail

  • Для постановки / производства вы должны очистить часть активов / папок вашей программы обновления / скрипта.

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

В YII 1 в конфигурации мы имеем:

 'components'=> [ ... 'assetManager' => array( 'forceCopy' => YII_DEBUG, ... ) ... ]