【问题标题】:Organizing assets in Symfony3在 Symfony3 中组织资产
【发布时间】:2025-12-16 16:25:03
【问题描述】:

我在 symfony 中处理我的资产仍有一些问题。 best practices 说,我应该将我的资产存储在 web/ 中。 但我不喜欢在那里存储我的原始 sass 文件,因为它是一个公共文件夹,我认为应该只存储已编译或静态文件。

这就是我目前将它们(js 和 sass)存储在 app/Resources 中的原因。我的assetic.read_fromapp/Resources。但是还有一些包,它们由assets:install 符号链接到web/bundles/

现在,当我想在我的 twig 文件中包含这个捆绑资产时,我必须通过样式表块中的../../web/bundles/.. 去那里。那看起来不是很干净,所以我做了一个符号链接app/Resources/bundles->web/bundles/ 并且有效。

但我仍然认为这太过分了,我想知道是否有一种更清洁的方式可以更好地在一个地方收集我的资产。

【问题讨论】:

    标签: symfony assetic


    【解决方案1】:

    不要使用 AsseticBundle,它甚至在默认的 symfony-standard 2.8 中被删除了。对于那些真的不想使用“正确工具”的人来说,使用 php 管理前端资产是一种解决方法

    我个人将我的源文件保存在 /assets/ 中,并使用 Grunt JS 将它们编译为 /web/assets/,然后通过 CDN 从 assets.somedomain.com 提供服务

    2 年前我写了一篇关于使用 symfony 管理资产的文章,它仍然有效并且是最新的。您可能想检查一下。

    http://konradpodgorski.com/blog/2014/06/23/better-way-to-work-with-assets-in-symfony-2/

    我应该用从那以后学到的东西来扩展帖子,但总是没有足够的时间:)

    【讨论】:

    • 那是迟来的反应,但我不想使用外部 cdns 或基于 javascript 的 css 管理。所以我更喜欢纯 php/server 的方式来编译和管理我的资产
    • 我尊重您的决定,但仍然认为这比设置正确的流程一次然后在每个项目中复制它更复杂。除非您使用没有任何编译器的纯 CSS,否则只需将它们放在 /web/assets/ 中就可以了
    【解决方案2】:

    我不明白您为什么不能使用 web/ 文件夹来存放您的资产。

    我经常使用less 和其他经过处理和缩小的文件格式。 您的问题的解决方案对我来说似乎很简单:使用 web/ 文件夹中的两个文件夹。

    第一个文件夹是您的source/ 文件夹。您将在其中放置所有 sass 文件。您将在同一文件夹中添加一个.htaccess 文件,并拒绝所有访问(您可以从src/ 文件夹中的.htaccess 文件复制)。

    然后是第二个文件夹,我们将其命名为 assets,它将保存您所有已编译和缩小的资产。

    这应该可以解决问题... ;)

    您可能也对this topic 感兴趣。进一步隐藏source/ 文件夹的存在可能会有所帮助。 ;)

    如果您真的不想将源文件放在 web/ 文件夹中,那么 loot at this 应该可以帮助您将源文件放在包中。

    【讨论】:

    • 为什么我应该将我的资产存储在一个通用的 /web 文件夹中?我想将它存储在包本身中
    • 主要是因为 Twig 会从 web/ 文件夹中读取资产。例如,<link rel="stylesheet" href="{{ asset('assets/style.css') }}"> 仅在您的资产文件夹位于 web/ 目录中时才有效。不过,您的 source/ 文件夹可以在您的捆绑包中。然后,您可以嵌入一个小型服务,该服务将与您的 CSS/JS 编译器/压缩器一起使用,并让它将文件写入 web/ 目录。记住良好的做法,有一个顺利的工作项目很重要。 ;)
    • @Asara 现在是您选择解决方案的时候了,Konrad 和我都为您提供了适合您问题的解决方案。无论如何,您的编译/缩小资产将是公开的,没有解决办法。我们都为您提供了保护来源的解决方案。