【问题标题】:How to add specific files to assetic?如何将特定文件添加到资产?
【发布时间】:2013-09-28 15:55:25
【问题描述】:

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

/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资源文件夹中,因为我的一些组件需要它”?

【问题讨论】:

    标签: symfony resourcebundle assetic


    【解决方案1】:
    1. 使用php app/console assets:install target [--symlink] 命令安装资产

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

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

    * 验证资产功能的路径

    【讨论】:

    • 如果我在我的 css 文件中访问它们,symfony 会分析这个吗?
    • 似乎不是关于资产,而是关于资产,如果我理解 symfony,这是两个不同的东西
    • 看来,如果我查看源文件(symfony 2.3),这里:vendor/symfony/assetic-bundle/Symfony/Bundle/AsseticBundle/Factory/Loader/AsseticHelperFormulaLoader.php 只有 javascripts、样式表和图像知道资产...
    • 如果您在 css 中处理您的字体文件,那么您应该使用cssrewrite 过滤器,如此处所述 - symfony.com/doc/current/cookbook/assetic/…
    • 我已经这样做了,但是 cssrewrite 似乎只在路径上运行,而不是在资源本身上 => 资源没有复制到 web 并且 {{ asset('@MyBundle/Resources/pubdlkfqsdfsd') }} 没有被分析(没有错误出来)。
    【解决方案2】:

    在 twig 中你应该有一个类似这样的 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。这只是使用这些工具的一种方法,但在大多数情况下它似乎对我有用。

    【讨论】:

    • This will only work with css, js and images. 这就是我想读的答案。资产方面还有改进的余地。谢谢你的回答,我检查它是有效的,但我可以请你强调这句话吗?我认为这是一个大问题,尤其是对于 CSS3 或者即使有些人想要共享声音或视频文件...
    【解决方案3】:

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

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

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

    【讨论】:

    • 这应该被接受为正确答案。我不知道 output='' 参数。谢谢!
    • 好的,我检查你的回答是否有效
    【解决方案4】:

    部分答案取自here

    如何为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 require symfony/assetic-bundle 的作曲家额外安装

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-12-29
      • 1970-01-01
      • 1970-01-01
      • 2021-04-02
      • 2023-03-07
      • 1970-01-01
      • 2023-04-02
      相关资源
      最近更新 更多