我們有一個多租戶的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