【问题标题】:Symfony2, loading css files without cacheSymfony2,加载没有缓存的css文件
【发布时间】:2013-01-10 09:54:41
【问题描述】:

目前我正在做基于 symfony2 的网站设计,问题是如何禁用 css 文件的缓存?现在,如果我更改 css 文件中的某些内容 - 浏览器中没有任何更改。当我尝试缓存时:清除 - 仍然没有。

config.yml

# Assetic Configuration
assetic:
debug:          "%kernel.debug%"
use_controller: true
#bundles:        [ ]
#java: /usr/bin/java
filters:
    cssrewrite: ~
    #closure:
    #    jar: "%kernel.root_dir%/Resources/java/compiler.jar"
    yui_css:
        jar: "%kernel.root_dir%/Resources/java/yuicompressor-2.4.7.jar"

树枝

    {% stylesheets filter="cssrewrite" output="css/general.css"
        "@EveCommonBundle/Resources/public/css/main.css" 
        "@EveCommonBundle/Resources/public/css/another.css" %}
    <link rel="stylesheet" type="text/css" href="{{ asset_url }}" />
    {% endstylesheets %}

我必须改变什么才能在浏览器中获取“最新”的 css 文件?

问题是,当我更改@EveCommonBundle/Resources/public/css/main.css 时,web/css 中仍然是旧的(由终端转储),并且没有重新创建,这就是为什么浏览器中没有显示“新更改”,并重新创建该文件我可以仅通过终端...我如何在浏览器中的每个 F5 上(在web/css 文件夹中)获取 sf2 重新创建 css 文件?

【问题讨论】:

    标签: css caching symfony assetic


    【解决方案1】:

    缓存是一种标准的浏览器行为。您可以每次手动清除它,也可以设置缓存清单:https://developer.mozilla.org/en-US/docs/HTML/Using_the_application_cache?redirectlocale=en-US&redirectslug=Offline_resources_in_Firefox 虽然这是 HTML5,但并非所有地方都支持。

    禁用文件缓存的一种简单方法是在每次文件更改时更改 url:您可以将随机字符串或版本号附加到您的 href :

    <link rel="stylesheet" type="text/css" href="{{ asset_url }}?{{some_random_string_goes_here}}=0" />
    

    <link rel="stylesheet" type="text/css" href="{{ asset_url }}?VERSION={{version_number}}" />
    

    随机字符串更易于调试,因为您无需在每次更改 css 时手动更新版本号。但是根据字符串的大小,你可能会很不走运,两次得到相同的字符串......

    【讨论】:

    • {% stylesheets '@EveCommonBundle/Resources/public/css/*' %} {% endstylesheets%} 没有改变 =\ 我知道浏览器的缓存,但事实并非如此,sf2 简单地使用“旧编译的 css 文件”而不是重新创建新的。
    • 嗯,我猜你正在使用 sass,这似乎是一个已知问题:github.com/symfony/symfony/issues/5713。我在 stakcoverflow 上发现了另一篇可能对您有所帮助的帖子:stackoverflow.com/questions/11419151/…
    【解决方案2】:

    在您的开发环境中,即通过app_dev.php 访问您的站点时,资产的路径是动态生成的,因此每个更改都应该立即可见。

    您可以使用以下命令自动创建资产(更多信息可以在食谱中找到,请参见下面的链接),但通常这不是必需的:

    php app/console assetic:dump --watch
    

    当使用资产并且您想在生产环境中查看您的更改时,您必须先转储资产以使其可访问:

    php app/console assetic:dump --env=prod --no-debug
    

    有关详细信息,请阅读说明书中如何使用 Assetic 进行资产管理中的 Dumping Asset Files 部分。

    如果一切都失败了,您可能希望在模板中使用以下内容:

    {% if app.environment == 'prod' %}{% else %}{% endif %}
    

    仅在生产环境中使用资产。

    【讨论】:

    • 我不需要“dump” css,我希望 css 显示“当前内容” - 不缓存,不转储,“仅上次保存”assetic:dump 创建“temp” css 文件并使用他们,你知道强制这种“创建”的选项吗?这意味着每个 F5 css 文件都必须在 /web/css 文件夹中重新创建?
    • “在您的开发环境中,即通过 app_dev.php 访问您的网站时,资产的路径是动态生成的,因此每个更改都应该立即可见。” - 不,不是,我想知道为什么?
    • @user1954544 如果您使用的是开发环境并且资产不会自动刷新,则很可能是缓存问题。你检查过响应头吗?您是否尝试过使用 ctrl+shift+r(忽略缓存)重新加载页面?
    • "php app/consoleassetic:dump --env=prod --no-debug" 这将物理生成并写入您需要的每个文件(例如 /js/abcd123.js)。如果您更新任何资产,则需要再次运行以重新生成文件。 symfony.com/doc/current/cookbook/assetic/… =\
    • -- 您是否尝试过使用 ctrl+shift+r(忽略缓存)重新加载页面? -- 没有相同的文件。
    【解决方案3】:

    如果您在开发中使用 symfony 2 资产。环境,只需使用以下命令:

    php app/console assets:install
    php app/console assetic:dump --watch
    

    参考来自:http://symfony.com/doc/2.1/cookbook/assetic/asset_management.html#dumping-asset-files-in-the-dev-environment

    【讨论】:

      【解决方案4】:

      问题是......嗯,甚至不知道是什么但是。 当前的 config.yml 和控制台命令完成了他们的工作。 (意味着我在 css 中所做的任何更改都会在浏览器中显示为“在线模式”)

      assets:install web --symlink
      assetic:dump web
      

      来自 config.yml 的部分

      # Twig Configuration
      twig:
          cache:            false
      
      # Assetic Configuration
      assetic:
          assets: 
              default_css:
                  inputs:
                      - '%kernel.root_dir%/Resources/public/css/default.css'
      
          debug:          "%kernel.debug%"
          use_controller: true
          bundles:        []
          #java: /usr/bin/java
          filters:
              cssrewrite: ~
      

      也有帮助(也许,不知道)

      // If you don't want to setup permissions the proper way, just uncomment the following PHP line
      // read http://symfony.com/doc/current/book/installation.html#configuration-and-setup for more information
      
      umask(0000);
      

      在树枝上看起来像这样

      {% stylesheets "@default_css" filter="cssrewrite" %}
          <link href="{{ asset_url }}" type="text/css" media="all" rel="stylesheet" />
      {% endstylesheets %}   
      

      有了这个参数,我可以从 css 创建\编辑\删除任何数据,它会立即显示在浏览器中。

      PS:我显示的代码“不常见”,config.yml 中的其他设置我认为与基本设置相同。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2010-12-31
        • 2020-05-19
        • 2016-12-06
        • 2021-11-02
        • 2012-07-21
        • 2021-12-15
        • 2015-03-21
        • 2018-11-29
        相关资源
        最近更新 更多