我们有一个symfony 2.4应用程序,它是一个多租户应用程序。这意味着我们在几个组织之间共享相同的代码库,通过域名分隔访问权限。所以它看起来像:
我们还使用Assetic bundle来处理所有组织常见的.scss和.css文件(截至今天)。所以基本上所有的租户都有相同的设计。主布局如下所示:
{% stylesheets filter='cssrewrite'
'@MainBundle/Resources/public/css/bootstrap-2.3.1.css'
'@MainBundle/Resources/public/css/bootstrap-responsive-2.3.1.css'
'@MainBundle/Resources/public/sass/main.scss'
%}
在main.scss
中我们为所有组织定义所有SCSS规则。
现在其中一个组织要求进行设计更改,而其他人可能不希望这样做。我想将特定于组织的.css' es或.scss&#es放入一个文件夹中,并在我的主布局中添加另一个stylesheets
循环。问题在于资产在处理资源时不愿意尊重Twig变量。让我通过一个例子和一个related question解释一下,如果我做类似的事情:
{% stylesheets filter='cssrewrite'
'@MainBundle/Resources/public/sass_organizations/*.css'
%}
<link href="{{ asset_url }}" type="text/css" rel="stylesheet" media="screen, print" />
{% endstylesheets %}
在我上面提到的主stylesheets
循环之后,它将处理{strong> ALL Resources/public/sass_organizations
中的资源,无论他们对应哪个组织。所以我需要一个基于当前域名的Twig模板中的条件。换句话说,像是
{% stylesheets filter='cssrewrite'
'@MainBundle/Resources/public/sass_organizations/' ~ organization.id ~ '.css'
%}
<link href="{{ asset_url }}" type="text/css" rel="stylesheet" media="screen, print" />
{% endstylesheets %}
如果我做类似后者的事情,资产包会因Unexpected token \"operator\" of value \"~\" in ...
异常而崩溃 - 是的,因为它在处理资源时对Twig及其引擎一无所知。
TL; DR :需要通过资产包提供css文件,但不是全部在文件夹中提供,而是基于Twig模板中的条件。
答案 0 :(得分:1)
在我的项目中,我使用了类似这样的解决方案: https://developer.happyr.com/rename-dump-from-asseticbundle
我们将git_commit部分添加到输出css / js名称,因为Amazon S3忽略&#34;缓存破坏者&#34;比如filename.css?cachebuster = jhjgfsjdfg
而不是git_commit你可以随心所欲地传递给你,因为你有权访问容器:)