Twig主模板

时间:2016-11-30 16:39:25

标签: php css symfony assetic

我们有一个symfony 2.4应用程序,它是一个多租户应用程序。这意味着我们在几个组织之间共享相同的代码库,通过域名分隔访问权限。所以它看起来像:

  • organization1.domain.com
  • organization2.domain.com
  • organization3.domain.com

我们还使用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模板中的条件。

1 个答案:

答案 0 :(得分:1)

在我的项目中,我使用了类似这样的解决方案: https://developer.happyr.com/rename-dump-from-asseticbundle

我们将git_commit部分添加到输出css / js名称,因为Amazon S3忽略&#34;缓存破坏者&#34;比如filename.css?cachebuster = jhjgfsjdfg

而不是git_commit你可以随心所欲地传递给你,因为你有权访问容器:)