在Symfony2上的prod中使用assetic时,找不到Twitter Bootstrap glyphicons字体

时间:2014-09-16 09:09:36

标签: php twitter-bootstrap symfony assetic

我已经阅读了很多有关此内容的帖子,但无法让这项内容适用于我的项目。

所以基本上我有一个包含twitter bootstrap(v3)的Symfony2项目。在开发模式下,每件事都运行正常,但是当我在prod模式下尝试它时,我得到的错误是说找不到twitter引导字体:

Failed to load resource: the server responded with a status of 404 (Not Found) http://localhost:8080/Symfony/css/fonts/glyphicons-halflings-regular.woff   
Failed to load resource: the server responded with a status of 404 (Not Found) http://localhost:8080/Symfony/css/fonts/glyphicons-halflings-regular.ttf  
Failed to load resource: the server responded with a status of 404 (Not Found) http://localhost:8080/Symfony/css/fonts/glyphicons-halflings-regular.svg#glyphicons_halflingsregular

这是正常原因我在Symfony /

中没有css /文件夹

以下是项目的结构:

app/
src/
vendor/
web/
   css/
      compiled/
   fonts/
   js/

twig file:

{% block stylesheets %}
    {% stylesheets output="css/compiled/main.css" filter='cssrewrite'
        'css/bootstrap.min.css'
        'css/general.css'
        'css/navigation.css'
    %}
        <link rel="stylesheet" href="{{ asset_url }}" />
    {% endstylesheets %}
{% endblock %}

我用过:

php app/console assetic:dump --env=prod

我已经检查了bootstrap.min.css(在web / css / compiled中)文件(prod和dev),它们都有相同的字体路径。像(../../../ fonts / fontName.ext)。

如果我们查看路径它不应该在开发模式或prod模式下工作,因为路径将字体/文件放在web目录之外。然而,它在开发模式下工作。

有关如何解决这个问题的想法吗?

我会很高兴。

4 个答案:

答案 0 :(得分:12)

如果您使用“cssrewrite”过滤器,它会重写 Maxoo 已经说过的字体文件(到其原始来源)的路径。

您可以按以下方式为字体文件添加资产路径(因此将它们复制到css/fonts/文件夹,css文件将使用原始../fonts/路径找到它们

我使用了以下解决方案:

<强> config.yml:

assetic:
    debug:          %kernel.debug%
    use_controller: false
    assets:
        bootstrap_fonts_woff:
            inputs:
                - 'original/path/to/bootstrap/fonts/glyphicons-halflings-regular.woff'
            output: fonts/glyphicons-halflings-regular.woff
        bootstrap_fonts_ttf:            
            inputs:
                - 'original/path/to/bootstrap/fonts/glyphicons-halflings-regular.ttf'
            output: fonts/glyphicons-halflings-regular.ttf
        bootstrap_fonts_svg:
            inputs:
                - 'original/path/to/bootstrap/fonts/glyphicons-halflings-regular.svg'
            output: fonts/glyphicons-halflings-regular.svg
        bootstrap_fonts_eot:
            inputs:
                - 'original/path/to/bootstrap/fonts/glyphicons-halflings-regular.eot'
            output: fonts/glyphicons-halflings-regular.eot

然后致电

php app/console assetic:dump --env=prod

应该将文件导出到web文件夹中的fonts-directory。

希望这有帮助!

答案 1 :(得分:0)

您不必在Symfony/路径下搜索它们,因此Symfony2 webfolder为web/,因此url与web/文件夹“相对”。

顺便说一下,你必须使用以下命令

php app/console assets:install

如果您想要符号链接,还可以在命令中添加--symlink参数

那么资产之间有什么区别:安装和资产:转储?

assets:install会将所需资源符号链接或复制到“公共网络文件夹”

assetic:dump只会将所有j合并为一个

答案 2 :(得分:0)

正确的解决方案:

  • 安装Nodejs,设置symfony2配置文件,它会自动将您选择的cssrewrite过滤器编译成CSS。这将解决这些错误。

  • 我的config.yml和config_dev.yml看起来只是一个资产部分 - 要非常小心路径语法,否则你会收到此错误“运行时出错:...错误:无法找到模块'less'“有很多人遇到这3条错误消息谷歌这个字符串找出”运行时发生错误:错误:找不到模块'少'“

assetic:

debug: '%kernel.debug%'
use_controller:
       enabled: '%kernel.debug%'
       profiler: true
filters:
    cssrewrite: ~
    ###is for linux path i am on windows for dev and linux for prod
    less:
        ###node: /usr/bin/nodejs
        ###node_paths: [/usr/lib/nodejs]
        node: "C:\\Program Files (x86)\\nodejs\\node.exe"
        node_paths: ["C:\\Users\\John\\AppData\\Roaming\\npm\\node_modules"]
        apply_to: "\.less$"
  • 不要忘记安装“npm install -g less”

  • 在我的具体案例中:当做“php app / console assetic:dump”时,我得到同样的错误。这是因为我的Windows开发Web服务器设置如下:web根目录是“C:\ xampp \ htdocs \”,项目就像这样“C:\ xampp \ htdocs \ phantom \”和资产:dump放置glyphicons -halflings-regular.ttf,glyphicons-halflings-regular.woff,以及“C:\ xampp \ htdocs \ phantom \ web \ fonts”中的glyphicons-halflings-regular.woff2但是,当加载页面时,它会查找“{{ 3}}“你可以看到这是我的开发设置的问题。所以我将文件夹字体“C:\ xampp \ htdocs \ phantom \ web \ fonts”复制到web根目录“C:\ xampp \ htdocs \”这就解决了这个问题。

  • 在服务器Web根目录为“C:\ xampp \ htdocs \ phantom \ web \”的生产环境中不会发生这种情况。我在生产服务器上进行了测试,无需手动将fonts文件夹复制到webroot。

  • 此外,当您在项目目录“php app / console assetic:dump”中运行相同的命令时,您将收到类似“FileError:'.. / bootstrap / without / bootstrap.less'之类的错误发现。试过 - ../bootstrap/less/bootstrap.less,C:\xampp\htdocs\phantom\vendor\mopa\bootstrap-bundle\Mopa\Bundle\BootstrapBundle\Resources\public\bootstrap“同样的标记引导程序是通过“C:\ xampp \ htdocs \ phantom \ web \ bootstrap”中的“php app / console assets:install”安装,这是不正确的webroot目录,所以再次解决开发中的这个临时问题我将只复制目录“C: \ xampp \ htdocs \ phantom \ web \ bootstrap“to”C:\ xampp \ htdocs \ bootstrap“解决了问题。再次运行你的命令它会很好地干净地编译成css。

答案 3 :(得分:-1)

可能你应该尝试保持Bootstrap文件夹结构不变(例如用凉亭下载它)。顺便说一句,cssrewrite过滤器将解析您的css文件以反映字体的位置。