Кэш Yii2 очищает кеш

Каждый раз, когда я обновляю свои файлы css или js в infoweb \ menu \ module \ assets, я должен очистить папку backend \ web \ assets
есть ли способ автоматически очистить кеш ресурсов?

есть дополнительное свойство, поскольку

if (YII_ENV_DEV) { ...; ...; ...; $config['components']['assetManager']['forceCopy'] = true; ...; ...; } 

публиковать файлы, даже если они опубликованы ранее

Добавьте это в ваш взгляд:

 use vendor\myVendorName\myPackageName\assets\AppAsset; AppAsset::register($this); 

Добавьте это в свой конфиг:

 'components' => [ 'assetManager' => [ 'linkAssets' => true, ], ] 

Пустая папка с ресурсами и обновление.

Если вы разрабатываете свой собственный плагин, вы можете принудительно опубликовать активы на один пакет (обратите внимание: $ sourcePath должен быть установлен)

 <?php namespace app\components\forms\redactorAssets; use yii\web\AssetBundle; class RedactorCutAsset extends AssetBundle { public $sourcePath = '@app/components/forms/redactorAssets/assets'; public $js = [ 'cut.js', ]; public $publishOptions = [ 'forceCopy'=>true, ]; } 

Если вы работаете в области окружающей среды, я рекомендую использовать Cache Busting:

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

для получения дополнительной информации об активах прочтите документацию по активам Yii2 .

Я использую CClientScript::registerScriptFile в своих файлах просмотра:

 Yii::app()->clientScript->registerScriptFile( $this->getAssetsBase() . '/js/script.js' ); 

Если я изменил script.js, после следующей перезагрузки страницы я увижу все изменения

Для файлов css – CClientScript::registerCssFile

 Yii::app()->clientScript->registerCssFile( $this->getAssetsBase() . '/css/style.css' ); 

ОБНОВЛЕНИЕ: если вы используете бета-версию yii 2.0, вы можете прочитать некоторую информацию об изменениях в механике клиентских помощников: link

AssetManager создаст хэш на основе времени изменения файла. Время изменения каталога не изменяется при изменении любого файла. Если у вас есть AssetBundle, у которого есть каталог в качестве источника $sourcePath , используется время модификации каталога, хеш не изменится и ничего не будет скопировано в каталог web/assets .

Я предлагаю переопределить AssetManager::hash() в подклассе или написать функцию для AssetManager::$hashCallback :

 'components' => [ 'assetManager' => [ 'hashCallback' => function($path) { // if: $path is directory: figure out when files were changed in directory // else: use original hash function in \yii\web\AssetManager } ], ] 

Для примерной реализации для определения максимальной измененной даты по всем файлам активов в комплекте вы можете посмотреть этот комментарий wookie @ http://php.net/manual/en/function.filemtime.php#35779

Обратите внимание, что изменение любого файла актива создаст новый каталог в web/assets , и регулярная очистка останется необходимой. Однако кеширование браузера в стороне, обновление страницы будет следовать последним изменениям.

Я настраиваю assetManager::forceCopy=true в main-local.php для среды dev, как это

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