【问题标题】:symfony2 Bundle public Resources URLsymfony2 捆绑公共资源 URL
【发布时间】:2015-11-24 10:56:34
【问题描述】:

我编写了一个包含公共资源的包:图像、CSS 和 Javascript。 一切都存储在我的 bundle Resources/public/ 文件夹中。

我启动了一个苦行命令,在全局 Web 项目文件夹中生成符号链接。

我的问题是我的包名称在图像、CSS 和 Javascript URL 中可见。 有没有办法重写这个 URL。 我想通过这个 URL 访问我的 CSS:http://mywebsite.com/mycustomfoldername/mycss.css

第二个问题:在全局web项目文件夹中直接写文件好不好?

【问题讨论】:

    标签: symfony assetic


    【解决方案1】:

    使用资产。在 Twig 模板中使用:

    {% stylesheets '@MyBundle/Resources/public/css/app.css'
            '@MyBundle/Resources/public/css/additional.css'
            output='mycss.css' %}
        <link rel="stylesheet" href="{{ asset_url }}" />
    {% endstylesheets %}
    

    然后使用命令:php app/console assetic:dump --env=prod

    在开发环境中,您会看到类似 http://yoursite.com/09516d4_mycss_1.css 的内容,但在生产环境中会看到 http://yoursite.com/mycss.css

    请注意,更改文件时必须始终使用 assetic:dump 以查看生产中的更改。

    对于字体我使用资产配置:

    assetic:
        assets:
            font-awesome-otf:
                inputs: '@AppBundle/Resources/fonts/FontAwesome.otf'
                output: 'fonts/FontAwesome.otf'
    

    您可以对图片进行同样的尝试:

    assetic:
        assets:
            image-background:
                inputs: '@AppBundle/Resources/images/back.jpg'
                output: 'images/back.jpg'
    

    【讨论】:

    • 很好,但我应该如何处理背景图片网址?这些 url 存储在 css 文件中。我不能在 css 文件中放入任何 {% %}...
    • 你能在你的回答中展示这个字体和图像实际使用方式的示例吗?就像在 css 文件或 html 文件等...
    【解决方案2】:

    如果你使用Symfony的内置命令assets:install命令它会改变:

    <script src="{{ asset('js/script.js') }}" type="text/javascript"></script>
    

    进入:

    <script src="/bundles/your-bundle/js/script.js" type="text/javascript"></script>
    

    但是如果你使用Asseticassetic:dump命令(这是AsseticBundle提供的命令)它会改变:

    {% javascripts '@YourBundleBundle/Resources/public/js/script.js' %}
        <script type="text/javascript" src="{{ asset_url }}"></script>
    {% endjavascripts %}
    

    进入(生产模式)

    <script type="text/javascript" src="/js/as5s31l.js"></script>
    

    我想它解决了您在 url 中的捆绑名称问题。

    至于将 js 文件直接放在主 web 文件夹中:这不是一个好主意,因为所有内容都应该是特定于捆绑包的,所有代码都位于捆绑包中,因此您的资产也应该如此。

    查看this 答案以获取有关assets:installassetic:dump commands 之间区别的更多解释

    【讨论】:

    • 在您的情况下(ascetic:dump),URL 不正确,因为 js 文件名已更改。我认为这是为了避免文件名冲突。我真的很想得到:
    • 如果您的脚本名称不会被更改 (script.js),您将无法更改任何内容 - script.js 将存储在用户浏览器的缓存中,并且在您更改任何内容后不会刷新 (因为名字是一样的)
    猜你喜欢
    • 2011-07-11
    • 1970-01-01
    • 2013-06-08
    • 2016-03-15
    • 1970-01-01
    • 2021-05-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多