2015-04-21 29 views
3

我在Symfony中加载字体时感到很困难。这里是什么错误:在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的命令资产:install安装资产放入我的网页文件夹。实际上资产已被复制,甚至是字体。

问题

当我去我的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 /“.....”erro r消息。

+0

检查'web'文件夹结构,并检查是否'网/包/经理/ lib目录/地铁-ui/fonts/metroSysIcons.woff'是否存在,或者是否存在差异 – Jean

+0

它确实存在并且没有区别。 –

+0

你正在运行'assets:install'命令吗? –

回答

0

所以之后我都试过了,有东西在我的.htaccess阻止字体文件。

RewriteCond %{HTTP_HOST} ^sub\.domain\.(?:lc|nl)$ [NC] 
RewriteRule $(.*) app_dev.php$1 [NC,L,QSA] 

我增加了以下条件:

RewriteCond %{HTTP_HOST} ^sub\.domain\.(?:lc|nl)$ [NC] 
RewriteCond %{REQUEST_URI} !\.(png|woff|tff)$ 
RewriteRule $(.*) app_dev.php$1 [NC,L,QSA] 

现在我可以加载字体。

1

您应该使用cssurlrewrite滤波器Assetic:

由于Assetic为您的资产产生新的网址,你的CSS文件中的任何相对路径 将打破。为了解决这个问题,请确保在您的样式表标签中使用cssrewrite过滤器。这将解析您的CSS 文件并在内部更正路径以反映新位置。

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

+0

感谢您的回答。我试过这个,但它也导致了404。我更新了我的问题。 –

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 %}