2015-04-21 5 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 в: установить для установки активы в мою веб-папку. Фактически активы были скопированы, даже шрифты.

Проблема

Когда я иду на веб-страницу мой CSS загружается, но мои шрифты не являются. Когда я смотрю в консоли разработчика (F12 в Chrome) я могу видеть, что загрузка результатов шрифтов в 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 

Так в основном каждый актив можно найти, как это, но не мои файлы шрифтов (Уофф и ПТФ оба).

Вопросы

Моя проблема возникает несколько вопросов:

  • Почему 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' папку, структуру, и проверить, если' 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 генерирует новые URL-адрес для ваших активов, любые относительные пути внутри ваших CSS файлов сломаются. Чтобы исправить это, обязательно используйте фильтр cssrewrite с тегом stylesheets. Это анализирует ваши файлы 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 %}