3

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

配置.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 上获取 sf2 重新创建 css 文件web/css

4

4 回答 4

4

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

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

php app/console assetic:dump --watch

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

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

有关更多信息,请阅读说明书中如何使用 Assetic 进行资产管理中的转储资产文件部分。

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

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

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

于 2013-01-26T16:30:31.043 回答
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 中的其他设置我认为与基本设置相同。

于 2013-03-29T16:54:39.637 回答
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 时手动更新版本号。但是根据字符串的大小,您可能会不走运并两次获得相同的字符串...

于 2013-01-26T16:16:18.663 回答
0

如果您在开发中使用 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

于 2013-03-12T10:13:08.653 回答