vaciar recargar navegador manera limpiar imagenes forzada desactivar con chrome cargar cache borrar borra actualizar php assets yii2

php - navegador - recargar y borrar cache chrome



Yii2 activos borrar caché (8)

Cada vez que actualizo mis archivos css o js en infoweb / menu / module / asset, tengo que vaciar la carpeta backend / web / asset
¿hay una manera de borrar automáticamente el caché de activos?


Agregue esto en su vista:

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

Agregue esto en su configuración:

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

Vaciar carpeta de activos, y actualizar, listo


Configuré el assetManager::forceCopy=true en main-local.php para el entorno dev como este

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


El AssetManager creará un hash basado en la hora de modificación del archivo. La hora de modificación de un directorio no cambia cuando se modifica cualquier archivo. Si tiene un AssetBundle que tiene un directorio como $sourcePath , se $sourcePath la hora de modificación del directorio, el hash no cambiará y nada se copiará en el directorio web/assets .

Sugiero anular AssetManager::hash() en una subclase o escribir una función para 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 } ], ]

Para una implementación de muestra para encontrar la fecha de modificación máxima de todos los archivos de activos en un paquete, puede ver este comentario en wookie @ http://php.net/manual/en/function.filemtime.php#35779

Tenga en cuenta que la modificación de cualquier archivo de activos creará un nuevo directorio en la web/assets , y la limpieza regular seguirá siendo necesaria. Sin embargo, aparte del caché del navegador, la actualización de la página seguirá los últimos cambios.


Si está desarrollando su propio complemento, puede forzar la publicación de activos por paquete (nota: se debe establecer $ 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, ]; }


Si su entorno es de producción, le recomiendo usar Cache Busting :

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

Para obtener más información sobre los activos, lea la documentación de Assets Yii2 .


hay propiedad adicional como

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

Para publicar archivos incluso allí se publican antes.


CClientScript::registerScriptFile método CClientScript::registerScriptFile en mis archivos de visualización:

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

Si modifiqué script.js, después de la próxima carga de la página veré todos los cambios

Para archivos css - CClientScript::registerCssFile

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

ACTUALIZACIÓN: si usa yii 2.0 beta, puede leer información sobre los cambios en la mecánica de los ayudantes de clientes aquí: link


sudo rm -rf frontend/web/assets/* sudo chmod 777 frontend/web/assets ./yii cache/flush-all

Si esto no funciona:

sudo rm -rf vendor/* composer install