有没有办法迫使Yii2在每个请求上重新加载模块资产?

时间:2014-07-31 09:01:04

标签: php yii assets yii2

我的网站分为不同的模块。每个模块都有自己特定的css或js文件 当我第一次打开使用我的资产的页面时,Yii的assetManager会创建一个文件夹。

不幸的是,如果我在我的文件中更改了某些内容,Yii 1.x不会重新加载我的css或js文件。

我必须手动删除web / assets文件夹。在开发应用程序时,这真的很烦人。

当我将模块添加到后端文件夹时,这是有效的,但是当我使用我自己的命名空间在vendor文件夹中创建模块时,这不起作用。

3 个答案:

答案 0 :(得分:3)

在Yii2中,您可以为此类资产的网址添加时间戳...

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

这不会强制资产在每个请求上重新加载,但是每当资产文件被更改时,URL都会因时间戳和更改而改变。这将迫使资产重新发布。

答案 1 :(得分:2)

您可以设置forceCopy = true

class Assets extends AssetBundle{

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

答案 2 :(得分:1)

关于Yii1.x使用assetManager,您可以通过在配置文件中将'forceCopy'属性设置为true来实现此目的

  

...复制资产文件和目录,即使它们已经发布   之前。此属性仅在开发阶段使用

有关详细信息,请参阅forceCopy文档here

或者,您可以使用linkAssets,它不会复制文件,但会在资产文件和您的资产目录之间创建一个软链接。你当然不能同时使用它们。

对于问题的第二部分我假设这是在Yii 2.x中,你应该使用AssetBundles,你可以从任何地方注册任何命名空间包,你只需在视图中注册一些像这样的

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