Есть ли способ передать переменную в метод Assetic в шаблонах
{% stylesheets '@SomeExampleBundle/Resources/views/ SOMEVAR /css/*' %} <link rel="stylesheet" href="{{ asset_url }}" /> {% endstylesheets %}
Поэтому я хочу передать SOMEVAR
с контроллера.
На данный момент я не думаю, что это возможно вообще. Причина этого заключается в том, что Assetic
запускается заранее, чтобы сбрасывать активы, поэтому он не запускает шаблон Twig для вычисления переменной. Это, вероятно, то же самое, если вы делаете это в шаблоне PHP.
Это означает, что переменные времени выполнения не будут вычисляться и расширяться. Таким образом, это делает невозможным создание активов, если используется переменная. Это может измениться в будущем, но это может привести к накладным расходам на производство каждый раз, когда активы запрашиваются пользователем, поскольку Assetic
должен будет генерировать активы.
Я знаю, что можно программно определять и генерировать актив, используя код, найденный в Assetic
напрямую (не используя AsseticBundle
). Вам нужно будет поэкспериментировать, прочитать исходный код и выполнить проб и ошибок, чтобы решить эту проблему.
На данный момент практически нет документации по Assetic
. Единственная ссылка, которую я могу дать, – это README
найденная здесь на странице github Assetic. Надеюсь, это скоро изменится.
Надеюсь это поможет.
Это возможно благодаря этому:
<link rel="stylesheet" href="{{ asset('bundles/yourbundle/css/'~ SOMEVAR ~'/css/' ) }}" />
Чтобы немного разобраться в ответе Чопчхопа:
Сначала вам нужно включить все файлы, которые необходимо сбрасывать в assetic, так как он должен знать, что вам нужно сбрасывать. То, что вы можете сделать условным образом, – это включение самого актива во время выполнения.
Итак, сначала положите в ассетную часть:
{% javascripts '@ExampleComBundle/Resources/public/js/module1.js' '@ExampleComBundle/Resources/public/js/module2.js' %} {% endjavascripts %}
Теперь вы можете поставить условие, которое вам нужно. Оба сценария будут сброшены во время развертывания, но вы сможете выбрать во время выполнения, в который нужно включить:
<link rel="stylesheet" href="{{ asset('bundles/examplecombundle/js/module' ~ WHICH_MODULE_TO_INCLUDE ~ '.js ) }}" />
Символ ~ – это просто оператор конкатенации в шаблонах Twig.
Работы, конечно же, с CSS и JS.
Другая альтернатива, которая работает с ограниченным диапазоном опций (решение Piotr не работает для меня в режиме dev):
{% javascripts '@AcmeDemoBundle/Resources/public/js/module_A.js' output='js/module_A.js' %} {% if myVar == "A" %} <script src="{{ asset_url }}"></script> {% endif %} {% endjavascripts %} {% javascripts '@AcmeDemoBundle/Resources/public/js/submodule1_B.js' '@AcmeDemoBundle/Resources/public/js/submodule2_B.js' '@AcmeDemoBundle/Resources/public/js/submodule3_B.js' output='js/module_B.js' %} {% if myVar == "B" %} <script src="{{ asset_url }}"></script> {% endif %} {% endjavascripts %} ...
Таким образом, каждый модуль будет сбрасываться при развертывании или динамически обрабатываться assetic, и вы можете выбрать, какой модуль будет включен, используя myVar .
Примечание. Здесь я использовал блок javascripts, но он будет работать с таблицами стилей.
Может быть, я не понял, но … ты пытаешься это сделать?
{% stylesheets '@SomeExampleBundle/Resources/views/' ~ somevar ~ '/css/*' %} <link rel="stylesheet" href="{{ asset_url }}" /> {% endstylesheets %}
Поскольку, насколько мне известно, строка, переданная в stylesheets
является допустимым выражением Twig, поэтому вы можете использовать переменную интерполяцию.
Во всяком случае, я не думаю, что это хорошая практика иметь динамические активы. Чего именно вы хотите достичь? Там может быть лучшее решение.