我在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)。
问题
我的问题提出了多个问题:
[编辑]
我尝试使用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 /" ......."错误信息。
答案 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 %}