2016-11-30 72 views
2

我们有一个多租户的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模板中的条件。

回答

1

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

我们添加git_commit部分输出的CSS/JS的名字,因为亚马逊S3忽略“快取清除”像filename.css缓存无效= jhjgfsjdfg

而不是git_commit你可以通过那里任何你想要的,因为你有访问容器:)

+0

谢谢你的很多,@ barat!它的工作原理和我需要做的唯一事情就是在存储覆盖.css的目录中创建{organization} .css文件。像在这个评论中提到的另一个:https://github.com/symfony/assetic-bundle/issues/136#issuecomment-109425518,否则它只会失败,例外“无法找到文件”...../{}组织的.css” – Alexey