2016-11-30 76 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