我们有一个多租户的symfony 2.4应用程序。这意味着我们在几个组织之间共享相同的代码库,通过域名分隔访问。所以它看起来像:树枝主模板中的租户特定CSS文件
- 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
循环我上面提到的后
{% stylesheets filter='cssrewrite'
'@MainBundle/Resources/public/sass_organizations/*.css'
%}
<link href="{{ asset_url }}" type="text/css" rel="stylesheet" media="screen, print" />
{% endstylesheets %}
,它将在Resources/public/sass_organizations
处理ALL的资源,不管它们对应于什么样的组织。所以我需要基于当前域名的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 %}
,如果我这样做后,assetic束将与Unexpected token \"operator\" of value \"~\" in ...
异常崩溃 - 是的,作为处理资源时它不知道嫩枝和其发动机东西。
TL; DR:需要通过资产捆绑包提供css文件,但不是全部位于文件夹中,而是基于Twig模板中的条件。
谢谢你的很多,@ barat!它的工作原理和我需要做的唯一事情就是在存储覆盖.css的目录中创建{organization} .css文件。像在这个评论中提到的另一个:https://github.com/symfony/assetic-bundle/issues/136#issuecomment-109425518,否则它只会失败,例外“无法找到文件”...../{}组织的.css” – Alexey