每次我在infoweb\menu\module\assets更新我的css或js文件时,我都必须清空backend\web\assets文件夹
有没有一种自动清除缓存的方式?
在您的视图中添加以下内容:
use vendor\myVendorName\myPackageName\assets\AppAsset;
AppAsset::register($this);
在您的配置文件中添加以下内容:
'components' => [
'assetManager' => [
'linkAssets' => true,
],
]
清空资产文件夹,刷新,完成
还有一个额外的属性:
if (YII_ENV_DEV) {
...;
...;
...;
$config['components']['assetManager']['forceCopy'] = true;
...;
...;
}
即使之前已经发布过文件,也要重新发布。
<?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,
];
}
sudo rm -rf frontend/web/assets/*
sudo chmod 777 frontend/web/assets
./yii cache/flush-all
sudo rm -rf vendor/*
composer install
'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
中创建一个新目录,并且定期清理仍然是必要的。 但是,除了浏览器缓存之外,刷新页面将遵循最新的更改。
我在我的视图文件中使用CClientScript::registerScriptFile
方法:
Yii::app()->clientScript->registerScriptFile(
$this->getAssetsBase() . '/js/script.js'
);
CClientScript :: registerCssFile
。Yii::app()->clientScript->registerCssFile(
$this->getAssetsBase() . '/css/style.css'
);
更新:如果您使用的是yii 2.0 beta版本,您可以在此处阅读有关客户端辅助程序机制更改的一些信息:链接
assetManager::forceCopy=true
。return [
'components' => [
...
'assetManager' => [
'forceCopy' => true,
]
...
],
];