Как встраивать таблицы стилей с Assetic, основанные на значении в сеансе

Я хочу вставлять различные файлы стилей с атрибутом в шаблон ветви проекта Symfony2. Используемая таблица стилей зависит от настройки темы пользователя.

я использовал

{% stylesheets '@CuteFlowCoreBundle/Resources/public/css/application.css' '@CuteFlowCoreBundle/Resources/public/css/theme/'~app.session.get('cuteflow_theme')~'/application.css' %} <link rel="stylesheet" href="{{ asset_url }}" type="text/css" media="all" /> {% endstylesheets %} 

Но это порождает ошибку:

 Unexpected token "operator" of value "~" in "CoreBundle::layout.html.twig" 

Я тоже попробовал следующее. Но это тоже не помогло.

 {% set theme = '@CuteFlowCoreBundle/Resources/public/css/theme/'~app.session.get('cuteflow_theme')~'/application.css' %} {% stylesheets '@CuteFlowCoreBundle/Resources/public/css/application.css' theme %} <link rel="stylesheet" href="{{ asset_url }}" type="text/css" media="all" /> {% endstylesheets %} 

Любые идеи, как это можно сделать?

Ответ прост: вы не можете этого сделать.

Assetic будет перебирать ваши шаблоны и генерировать все файлы из блоков {% stylesheets %} .

Если вы используете переменную (например, сеанс), Assetic не может «угадать» все возможные значения.

У вас есть 2 возможности:

  • Разделяйте 2 вызова CSS (1 для общего вызова, 1 для выделенной темы CSS) – имеет больше смысла для меня
  • Создайте 1 CSS на тему

Разделить 2 вызова CSS

 {% stylesheets "A.css" "B.css" %} ... {% endstylesheets %} <link rel="stylesheet" href="{{ asset("css/" ~ theme ~ ".css") }}" /> 

Создайте 1 CSS на тему

Если вы хотите создать одну тему для каждой доступной темы, для ее упрощения вам нужно сделать это вручную:

 {% if theme == "XXX" %} {%stylesheets "A.css" "XXX.css" %} ... {% endstylesheets %} {% elseif theme == "YYY" %} {%stylesheets "A.css" "YYY.css" %} ... {% endstylesheets %} {% endif %}