在Symfony中找不到字体文件的路由

时间:2015-04-21 11:56:22

标签: symfony fonts routes assetic

我在Symfony中加载字体时遇到了一些麻烦。这里出了什么问题:

情况

我正在使用Symfony,我正在尝试将Metro UI CSS文件添加到捆绑包中。这些文件位于Resources / public / lib / metro-ui文件夹中。

Resources/public/lib/metro-ui
    - css
    - fonts
    - js
    - min

我在这样的树枝文件中有一个布局:

{% stylesheets
    'bundles/manager/lib/metro-ui/css/metro-bootstrap.css'
%}

Metro UI的引导程序文件包含以下字体:

@font-face {
  font-family: 'metroSysIcons';
  src: url('../fonts/metroSysIcons.woff') format('woff'),
  url('../fonts/metroSysIcons.ttf') format('truetype'),
  url('../fonts/metroSysIcons.svg#metroSysIcons') format('svg');
  font-weight: normal;
  font-style: normal;
}

我使用了Assetic的命令资产:安装将资产安装到我的网络文件夹中。事实上,资产已被复制,甚至是字体。

问题

当我访问网页时,我的css已加载,但我的字体不是。当我查看开发者控制台(Chrome中的F12)时,我可以看到加载字体会产生404.请求的URL是:

http://sub.domain.lc/fonts/metroSysIcons.woff

当我在浏览器中输入此地址时,我得到以下内容:

No route found for "GET /fonts/metroSysIcons.woff"

404 Not Found - NotFoundHttpException
1 linked Exception:
ResourceNotFoundException »

对于其他每一项资产,这都有效:

// This loads the correct bootstrap file:
http://sub.domain.lc/css/afd9510_metro-bootstrap_1.css

所以基本上每个资产都可以这样找到,但不能找到我的字体文件(woff和tff)。

问题

我的问题提出了多个问题:

  • 为什么Symfony试图通过app.php找到我的字体,使用路由?
  • 是否通过路线找到所有资产?
  • 如果是这样的话:为什么没有解析到字体文件的路由?
  • 如何加载我的字体文件?

[编辑]

我尝试使用css重写过滤器,如下所示:

{% stylesheets filter='cssrewrite'
    'bundles/manager/lib/metro-ui/css/metro-bootstrap.css'
%}

我仍然收到404,但现在浏览器正在尝试从此位置检索我的字体:

http://sub.domain.lc/bundles/manager/lib/metro-ui/fonts/metroSysIcons.woff

我得到的相同"找不到" GET /" ......."错误信息。

2 个答案:

答案 0 :(得分:1)

您应该使用带有Assetic的cssurlrewrite过滤器:

  

由于Assetic会为您的资产生成新的网址,因此会生成任何相对路径   你的CSS文件里面会破坏。要解决此问题,请务必使用   带有样式表标签的cssrewrite过滤器。这解析了你的CSS   文件并在内部纠正路径以反映新位置。

链接到文档:http://symfony.com/doc/current/cookbook/assetic/asset_management.html

答案 1 :(得分:0)

你试过这个(它的名字是别名):

{% stylesheets output = 'fonts/metroSysIcons.woff' 
    '@bundles/manager/lib/fonts/metroSysIcons.woff' %}
{% endstylesheets %}

我不确定第'@bundles/manager/lib/metro-ui/css/metro-bootstrap.css'行,因为如果您的路径不完全相同,它可能会有所不同。

应该是:@bundle_name/path/to/your/file/file.css

不要忘记CSS:

{% stylesheets '@MyBundle/Resources/public/css/my.css' %}
    <link rel="stylesheet" href="{{ asset_url }}" />
{% endstylesheets %}