Symfony Assetic资源类型错误

4

我在symfony 2上遇到了一个奇怪的问题。我正在处理一个项目,其中所有样式表和javascript文件都是通过asset(path/to/file)加载的。我决定使用带有cssrewrite和yui_compressor的assetic,因此我这样添加它们:

// this is just one file for example
{% stylesheets
    'bundles/mybundle/css/main.css'
    filter='?cssrewrite, ?yui_css'
%}

现在在生产环境中一切都运行得很完美,但问题出现在开发环境中。文件链接正确,我可以打开文件,但资源类型实际上是text/html而不是text/css,即使类型设置为text/css,就像这样:

<link rel="stylesheet" type="text/css" href="/app_dev.php/css/ab72c13_main_1.css"/>

什么原因会导致这个奇怪的问题?

“resource type is actually text/html instead of text/css”是什么意思?你从哪里得到这个信息的?此外,请注意,在过滤器前面使用?会告诉Assetic不要处理它们,因此这不太可能是Assetic的问题(http://symfony.com/doc/current/cookbook/assetic/yuicompressor.html#disable-minification-in-debug-mode)。 - cheesemacfly
我知道,但在使用 Assetic 之前,这个问题并不存在,所以我认为是 Assetic 的问题。我注意到 CSS 文件根本没有被应用,所以我在 Chrome 的调试工具栏(或者叫什么名字)中检查了一下,发现该资源的类型是 text/html。 - beliveyourdream
好的,那很有道理。你能展示一下你twig模板中完整的{% stylesheets %}吗? - cheesemacfly
只是这个文件和另一个文件,因为我想逐个添加它们...两个文件的行为都相同。 - beliveyourdream
如果您在开发环境中删除?并让cssrewrite过滤器生效,会怎样呢? - cheesemacfly
@cheesemacfly 没有 :( - beliveyourdream
3个回答

4

在@cordoval的帮助下,我终于找到了问题所在。

我有两个文件配置了assetic:use_controller,并且其中一个用true覆盖了另一个文件。

因此,解决这个问题的方法是将assetic: use_controller:false设置为假,并使用assetic:dump --watch自动转储assetic,以防止您每次修改css/js文件时都要手动操作。


1
我已经使用了 use_controller: false,但它仍然获取错误的MIME类型。 - afilina

0

请检查您的 security.yml 文件,确保所有角色都可以访问 CSS 文件。

access_control:
    - { path: ^/, role: IS_AUTHENTICATED_ANONYMOUSLY }

0
尝试移除 yui_css 过滤器并测试其他隔离的内容。

我没有使用控制器。 - beliveyourdream
你粘贴的链接中有指向前端控制器的href,CSS是通过它加载的。你在twig模板中实际使用的链接是什么?是href="{{ asset_url }}"吗? - Chris Sedlmayr
<link rel="stylesheet" type="text/css" href="{{ asset_url }}"/> - beliveyourdream
所以,是的,您正在通过前端控制器进行操作。您是否已经使用assets:install安装了资源?这将把它们放置在您需要使用bundles/mybundle格式定位它们的位置。您尝试过使用@符号加载吗? - Chris Sedlmayr
是的,我也尝试过使用@。关于控制器,我在考虑使用控制器,但我已经将其设置为false在资源配置中。 - beliveyourdream
显示剩余2条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接