Symfony2试图通过路由提供我的/ css / *路径,但我不想这样做

时间:2012-05-01 12:09:09

标签: routing symfony

如果我转到此URI

/app_dev.php/css/eabd201_jquery.ui.theme_15.css

它给了我CSS文件,这是我所期望的,但如果我转到这个URI,

/app_dev.php/css/images/ui-icons_222222_256x240.png

我收到此错误:

  

找不到“GET /css/images/ui-icons_222222_256x240.png”的路线

似乎必须有办法告诉Symfony不要尝试通过/css/*路径的路由。 (我知道文件存在。)我怎么能这样做?

编辑:这是我的.htaccess文件:

<IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteCond %{REQUEST_FILENAME} !-f 
    RewriteRule ^(.*)$ app.php [QSA,L]
</IfModule>

1 个答案:

答案 0 :(得分:1)

我不知道这是不是你的情况,但想象一下目录结构:

├── css
│   ├── style.css
├── images
│   ├── foo.png

style.css中,只要您使用url(../images/foo.png)等相对路径引用图片,如果将style.css移动到另一个目录中就无法使用。

您正在使用Assetic来渲染CSS文件,因此将此CSS文件“移动”到/app_dev.php/css目录中,该目录实际上并不存在,并由app_dev.php控制器处理。所以现在,图像的相对路径并不指向图像,而是/app_dev.php/images/foo.png,它也不存在,并且由app_dev.php控制器处理。

希望这是一个非常常见的问题,并且有一个内置解决方案:cssrewrite过滤器。

您可以将其添加到{% stylesheet %}代码:

# app/config/config.yml
assetic:
    # ...
    filters:
        cssrewrite: ~

{# your template #}

{% stylesheet 'bundles/foo/css/style.css' filter='cssrewrite' %}

或将其应用于每个CSS文件:

# app/config/config.yml
assetic:
    # ...
    filters:
        cssrwrite:
            apply_to: \.css$

它将负责为您重写这种路径。