11

我有我的捆绑包的自定义资源目录,其中有一些文件:

/longpathtoSymfony/src/MyOwn/Bundle/MyOwnBundle/Resources/public
|-- bootstrap
|   |-- css
|   |   |-- bootstrap-theme.css
|   |   |-- bootstrap-theme.min.css
|   |   |-- bootstrap.css
|   |   |-- bootstrap.min.css
|   |   `-- carousel.css
|   |-- fonts
|   |   |-- glyphicons-halflings-regular.eot
|   |   |-- glyphicons-halflings-regular.svg
|   |   |-- glyphicons-halflings-regular.ttf
|   |   `-- glyphicons-halflings-regular.woff
|   `-- js
|       |-- bootstrap.js
|       |-- bootstrap.min.js
|       |-- holder.js
|       `-- respond.min.js
|-- css
|   `-- custom.css
|-- fonts
|   |-- glyphicons-halflings-regular.svg
|   |-- glyphicons-halflings-regular.ttf
|   `-- glyphicons-halflings-regular.woff
|-- images
|-- img
`-- js
    |-- html5shiv.js
    |-- jquery-1.10.2.min.map
    |-- jquery.js
    `-- less-1.3.3.min.js

并且所有的 js 和 css 文件都被正确地放到了 public 文件夹中,因此我可以访问bootstrap/css/xxx.css文件等等,除了字体文件。

我不知道我应该怎么做才能将它们复制到web目录中。如果我尝试php app/console assetic:dump,则只复制 css 和 js 文件:

php app/console assetic:dump
Dumping all dev assets.
Debug mode is on.

18:41:17 [file+] /longpathToSymfony/app/../web/css/bef717e.css
18:41:17 [file+] /longpathToSymfony/app/../web/css/bef717e_bootstrap.min_1.css
18:41:17 [file+] /longpathToSymfony/app/../web/js/6f9045a.js
18:41:17 [file+] /longpathToSymfony/app/../web/js/6f9045a_html5shiv_1.js
18:41:17 [file+] /longpathToSymfony/app/../web/js/6f9045a_respond.min_2.js
18:41:17 [file+] /longpathToSymfony/app/../web/css/0c1e28e.css
18:41:17 [file+] /longpathToSymfony/app/../web/css/0c1e28e_carousel_1.css
18:41:17 [file+] /longpathToSymfony/app/../web/js/0aa0509.js
18:41:17 [file+] /longpathToSymfony/app/../web/js/0aa0509_jquery_1.js
18:41:17 [file+] /longpathToSymfony/app/../web/js/0aa0509_bootstrap.min_2.js
18:41:17 [file+] /longpathToSymfony/app/../web/js/0aa0509_holder_3.js
18:41:17 [file+] /longpathToSymfony/app/../web/js/0aa0509_less-1.3.3.min_4.js

我应该怎么做才能包含字体文件?我遇到了同样的问题jquery-1.10.2.min.map,它是动态下载的。有没有办法对 symfony 说“嘿把它放在 web 资源文件夹中,因为我的一些组件需要它”?

4

4 回答 4

18

我遇到了同样的问题,我只是尝试使用以下方法作为解决方法。到目前为止似乎工作。

{% stylesheets
    output='assets/fonts/glyphicons-halflings-regular.ttf'
    'bundles/bootstrap/fonts/glyphicons-halflings-regular.ttf'
%}{% endstylesheets %}

注意任何输出的遗漏,这意味着模板上没有显示任何内容。当我运行时assetic:dump,文件被复制到所需的位置,并且 css 包含预期的工作。

于 2013-10-18T22:05:26.780 回答
9

在树枝中,你应该有一个类似这样的 javascripts 块:

{% block javascripts %}
    {% javascripts
        'bundles/myown/bootstrap/js/bootstrap.js'
        'bundles/myown/bootstrap/js/respond.js'
        'bundles/myown/js/*'
    %}
    <script src="{{ asset_url }}"></script>
    {% endjavascripts %}
{% endblock %}

你的CSS也是如此。

{% block stylesheets %}
    {% stylesheets
        'bundles/myown/bootstrap/css/bootstrap-theme.css'
        'bundles/myown/css/*'
        filter='cssrewrite'
    %}
    <link rel="stylesheet" href="{{ asset_url }}">
    {% endstylesheets %}
{% endblock %}

现在您可以安装这些资产以便于开发(app_dev.php):

php app/console cache:clear --env=dev
php app/console assets:install web --symlink

此时,您应该看到 /longpathtoSymfony/web/bundles/myown 中的符号链接文件夹链接回您的捆绑资源。符号链接选项的好处是您可以更改捆绑文件夹中的脚本,而无需运行 assets:install 命令即可在浏览器中查看这些更改。刷新一下。

当您准备好迁移到生产环境时,使用assetic:dump 命令。这仅适用于 css、js 和图像。因此,您需要手动将字体文件夹移动到 web 目录中,或者编写自己的脚本来为您移动这些内容。

确保在 config.yml 中让 Assetic 知道你的包

assetic:
    bundles:        [ 'MyOwnBundle' ]

现在,您可以使用以下方式转储您的生产就绪资产:

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

因此,当您在浏览器中查看它时,只需删除 app_dev.php,它就会从转储到 web/css 和 web/js 文件夹中的单个文件中加载您的 css 和 javascript。这只是使用这些工具的一种方法,但在大多数情况下它似乎对我有用。

于 2013-10-05T17:00:46.817 回答
0
  1. php app/console assets:install target [--symlink]使用命令安装资产

  2. 使用asset()twig 函数访问您的字体文件:

    asset('bundles/myown/fonts/glyphicons-halflings-regular.ttf')

*验证资产功能的路径

于 2013-09-23T18:42:34.117 回答
0

部分答案取自这里

如何为 js、css 和字体设置资源路径

{% stylesheets
    '@bootstrap_css'#this is some custom or bundled files which you want to include
    'bundles/mybundle/css/custom.css'
    filter="cssrewrite"
    output='some/path/to.css'
%}

这部分将构建一个文件中显示的所有 css,并将其放入代码示例中也显示的路径。现在 to.css 将被放置在/web/some/path/to.css

JS也是如此:

{% javascripts
    '@jquery' #this is some custom or bundled files which you want to include
    '@bootstrap_js'
    'bundles/fosjsrouting/js/router.js'
    output='js/compiled/app.js'
%}

现在您将拥有所有构建在 1 个文件中的 js,其中包含路径/web/js/compiled/app.js

FY:在最新版本的 symfony Assetic 捆绑包中不存在 - 它应该通过 composer 额外安装composer require symfony/assetic-bundle

于 2016-12-07T20:45:23.783 回答