12

我的网站分为不同的模块。/protected/modules/my_module/assets/css每个模块在 js 文件中或用于 js 文件中都有自己特定的 css 或 jsjs文件。当我第一次使用使用我的资产的页面时,Yiis 资产管理器会创建文件夹。不幸的是,如果我在我的文件中更改某事 - Yii 不会重新加载我的 css 或 js 文件。我必须手动删除/projects/assets文件夹。开发应用程序时真的很烦人。

有没有办法强制 Yii 每次请求都重新加载资产?

4

5 回答 5

22

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应该可以实现该目标。

于 2013-03-25T15:09:29.413 回答
11

如果您使用的是 Yii2,则可以通过配置获得更简单的解决方案。

将以下内容添加到您的'config/web.php':

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

这会强制AssetManager在每次运行时复制所有文件夹。

于 2014-10-18T10:57:11.360 回答
3

另一种解决方案是像这样发布您的模块资产:

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

第四个参数强制复制您的资产,即使它们已经发布。有关详细信息,请参阅有关publish()的手册。

于 2013-03-25T15:49:18.987 回答
2

在每个请求上重新发布资产可能会占用大量资源,并且对于开发来说是不必要的。

如果由于某种原因您无法在开发机器上使用符号链接(不太可能),请仅退回到其他解决方案之一。

于 2014-01-13T08:44:31.807 回答
1

在配置中的 YII 1 中,我们有:

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

]
于 2017-03-04T13:14:45.483 回答