Symfony2 - Assetic - css字体图标

时间:2014-05-03 11:23:37

标签: php css symfony fonts assetic

如何通过/ vendor dir中的composer包含css字体图标库(例如fontawesome)。包括:

{% stylesheets filter='cssrewrite' 
  '%kernel.root_dir%/../vendor/fortawesome/font-awesome/css/font-awesome.min.css'  %}
  <link href="{{ asset_url }}" type="text/css" rel="stylesheet"/>
{% endstylesheets %}

但它不会重写字体文件网址,它会保持不变,并且图标不会加载:

src: url('../fonts/fontawesome-webfont.eot?v=4.0.3');

我知道,我们不能让网址在webroot之外,但也许资产可以自动将这些依赖项放到/ web上?

我现在看到的唯一方法是使用安装后的composet脚本将此资产复制到/ web目录,但我想找到更好的方法。

谢谢!

2 个答案:

答案 0 :(得分:17)

在#symfony频道上被问及我必须使用font-awesone的唯一答案是将它们包含在资产下的config.yml中。原始代码如下:

assetic:
  java: /usr/bin/java
  use_controller: false
  bundles: [ CorvusFrontendBundle, CorvusAdminBundle ]
  assets:
    font-awesome-otf:
      inputs: '%kernel.root_dir%/Resources/public/fonts/FontAwesome.otf'
      output: 'fonts/FontAwesome.otf'
    font-awesome-eot:
      inputs: '%kernel.root_dir%/Resources/public/fonts/fontawesome-webfont.eot'
      output: 'fonts/fontawesome-webfont.eot'
    font-awesome-svg:
      inputs: '%kernel.root_dir%/Resources/public/fonts/fontawesome-webfont.svg'
      output: 'fonts/fontawesome-webfont.svg'
    font-awesome-ttf:
      inputs: '%kernel.root_dir%/Resources/public/fonts/fontawesome-webfont.ttf'
      output: 'fonts/fontawesome-webfont.ttf'
    font-awesome-woff:
      inputs: '%kernel.root_dir%/Resources/public/fonts/fontawesome-webfont.woff'
      output: 'fonts/fontawesome-webfont.woff'
  filters:
    cssrewrite: ~
    yui_js:
      jar: %kernel.root_dir%/Resources/java/yuicompressor-2.4.8.jar
    lessphp:
       file: "%kernel.root_dir%/../vendor/oyejorge/less.php/lessc.inc.php"
       apply_to: "\.less$"

然后调用css文件如下:

{# Common Stylesheets #}
{% stylesheets filter="?cssrewrite"
  '%kernel.root_dir%/Resources/public/css/font-awesome.min.css'
  '@CorvusCoreBundle/Resources/public/css/common.less'
%}
    <link rel="stylesheet" href="{{ asset_url }}" />
{% endstylesheets %}

最后转储文件。但是,根据我的经验,我得到了字体本身的重复文件。我可能做了一些愚蠢的事。

HTH,

信用:https://gist.github.com/ilikeprograms/a8db0ad7824b06c48b44

2015年6月更新:答案发布于Symfony2版本2.1 / 2.3。这个答案可能适用于或不适用于最新版本:您必须检查

答案 1 :(得分:6)

上面的答案非常好,但是如果你的字体没有存储在app目录中,那么上面的工作就不行了。我的CSS文件保存在我自己的包中,所以为了确保找到它们,我需要像我这样配置app/config/config.yml;

assetic:
    debug:          "%kernel.debug%"
    use_controller: false
    bundles:
      - AjtrichardsAdminBundle
      - AjtrichardsMainBundle
    assets:
      font-awesome-ttf:
        inputs: '@AjtrichardsMainBundle/Resources/public/fonts/icons.ttf'
        output: 'fonts/icons.ttf'
      font-awesome-woff:
        inputs: '@AjtrichardsMainBundle/Resources/public/fonts/icons.woff'
        output: 'fonts/icons.woff'