【问题标题】:Is there a way to force Yii to reload module assets on every request?有没有办法强制 Yii 在每次请求时重新加载模块资源?
【发布时间】:2013-03-14 21:47:44
【问题描述】:

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

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

【问题讨论】:

    标签: php yii refresh reload assets


    【解决方案1】:

    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 中的放置只是放置位置的一个示例。您只需在调用publish() 之前将forceCopy 属性设置为true,并将其置于beforeAction 中即可实现该目标。

    【讨论】:

    • 提示:defined(YII_DEBUG) 不是必需的 - 它总是被定义为 truefalse
    【解决方案2】:

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

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

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

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

    【讨论】:

    • .. 或者您可以简单地在 componentsassetManager 部分添加'forceCopy' => YII_DEBUG,
    【解决方案3】:

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

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

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

    【讨论】:

      【解决方案4】:

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

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

      【讨论】:

      • 非常有趣的解决方案。我会研究它,但它看起来很有希望,而且确实比每次请求都发布资产更快。
      【解决方案5】:

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2022-12-23
        • 1970-01-01
        • 2015-06-05
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-08-18
        相关资源
        最近更新 更多