Передайте переменную в URL ресурса Assetic в Symfony2

Есть ли способ передать переменную в метод Assetic в шаблонах

{% stylesheets '@SomeExampleBundle/Resources/views/ SOMEVAR /css/*' %} <link rel="stylesheet" href="{{ asset_url }}" /> {% endstylesheets %} 

Поэтому я хочу передать SOMEVAR с контроллера.

Solutions Collecting From Web of "Передайте переменную в URL ресурса Assetic в Symfony2"

На данный момент я не думаю, что это возможно вообще. Причина этого заключается в том, что 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, поэтому вы можете использовать переменную интерполяцию.

Во всяком случае, я не думаю, что это хорошая практика иметь динамические активы. Чего именно вы хотите достичь? Там может быть лучшее решение.