Внедрить Twig в JS с помощью Assetic (мощь .js.twig)
Во-первых, эта статья представляет собой минутный отчет мотыга который я сделал несколько дней назад.
Не являясь ярым сторонникомАссет, я обязательно использую его в проектах, которые мы сейчас разрабатываем в моей компании. И поэтому использование Ассет должен оказать мне максимальную услугу, как и все инструменты.
Проблема ? Решение !
Вот моя проблема. У всех нас была необходимость построить маршрут в файле JS. Мы все нашли псевдорешение этой проблемы.
- Вы вводите на свою страницу (HTML) переменную JS с содержимым Веточка. Эта переменная будет использоваться в файле JavaScript, загружаемом через Ассет. Эффективно, но трудно читается и не очень удобно.
12345678// шаблон ветки<скрипт>вар моя переменная = « {{ path(‘my_route’) }}";</скрипт>// javascript-файл$("#sort").on("change", function() {window.location.href = myVar + $(this).val(); - Вы используете FOSJsRoutingBundle и используете каталог маршрутов в файле JS созданный пакет. Преимущество заключается в том, что маршруты можно очень легко генерировать с контекстно-зависимыми параметрами. Недостаток, использование пакет дополнительные, и обязанность объявлять дороги пригодными для использования с опцией подвергать = правда. Это потенциально может раскрыть некоторые маршруты в файле, содержащем все открытые маршруты.
Иногда использование FOSJsRoutingBundle это немного похоже на использование базуки, чтобы убить муху: это стоит дорого, когда вам не нужно много делать. Альтернатива, попытка ввести Веточка в его JS.
В каком случае использовать и каковы ограничения?
Будьте осторожны, это мотыга не следует использовать любой ценой, поскольку его использование очень ограничено.
Ассет компилирует файлы JavaScript способом, полностью оторванным от текущего контекста. Я имею в виду контекст под текущим запросом. Если в файле JS вы можете попробовать использовать все и вся, при генерации файла будут доступны только определенные переменные.
- Глобальные переменные Веточка
- функции и фильтры Веточка может быть использован
- Маршруты доступны и могут быть сгенерированы
КУКУРУЗА !! контекст недоступен, поэтому не ожидал использования текущих параметров запроса через переменные Веточка В любом случае.
Таким образом, вы можете генерировать маршруты без динамических параметров или со статическими параметрами или даже использовать глобальные параметры, такие как введенные в параметр.yml.
Все о том, как настроить
Вам нужно создать фильтр Веточка так что Ассет знать, что делать с вашими файлами. Вы можете разместить его в src/AppBundle/Фильтр.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
|
Пространство имен AppBundleФильтр;
использование АссетактивыАктивИнтерфейс;
использование АссетФильтрФильтрИнтерфейс;
использование SymfonyПакетTwigBundleTwigEngine;
/ **
* @автор Баптист Доно@gmail.com>
*/
класс TwigFilter инвентарь ФильтрИнтерфейс
{
частная $ шаблон;
что такое варган? функция __конструкт(TwigEngine $шаблон)
{
$ Этой->шаблон = $шаблон;
}
что такое варган? функция фильтрЗагрузить(AssetInterface $ актив)
{}
что такое варган? функция фильтрДамп(AssetInterface $ актив)
{
$content = $asset->getContent();
$ content = $ Этой->templating->render($asset->getSourceRoot()."/".$asset->getSourcePath());
$актив->setContent($контент);
}
}
|
Вы должны объявить этот фильтр. Это сервис, который мы пометим как фильтрАссет. Вы можете заявить об этом в приложение/config/services.yml.
1
2
3
4
5
6
7
|
услуги:
активный.фильтр.ветка:
учебный класс: AppBundleFiфильтрTwigFilter
аргументы:
– @шаблон
теги:
– { имя: «ассетный.фильтр», он же: «веточка» }
|
В твоей шаблон где вы хотите использовать файл, например .js.twig, вы просто объявите фильтр Ассет.
1
2
3
4
5
|
{% JavaScripts фильтр = «ветвь»
'@AppBundle/Resources/public/js/file.js.twig'
%}
<скрипт напишите=«текст/javascript» SRC=« {{ asset_url }}« ></скрипт>
{% конец javascripts %}
|
вот файл файл.js.twig используется в моем случае.
1
2
3
|
$(" #заклинание ").на("изменять", функция() {
окно.location.href= "{{путь('my_route', {}) }}" + $(это).вал();
});
|
После того, как файл сгенерирован, начинается рендеринг.
1
2
3
|
$(" #заклинание ").на("изменять", функция() {
окно.location.href= «/мой_маршрут» + $(это).вал();
});
|
Вывод, почему бы и нет?
Использование этого трюка должно быть действительно взвешенным, потому что, если он позволяет внедрить несколько переменных или несколько простых маршрутов, проблемы могут быстро стать более серьезными. В этих случаях этого решения может быть недостаточно.
Это решение также направлено на то, чтобы показать, чтоАссет может предложить решения проблем, решения, которые хрюкать, Глоток ou Завтрак не всегда могу предложить.