Внедрить Twig в JS с помощью Assetic (мощь .js.twig)
Веб-агентство » Цифровые новости » Внедрить Twig в JS с помощью Assetic (мощь .js.twig)

Внедрить Twig в JS с помощью Assetic (мощь .js.twig)

Во-первых, эта статья представляет собой минутный отчет мотыга который я сделал несколько дней назад.

Не являясь ярым сторонникомАссет, я обязательно использую его в проектах, которые мы сейчас разрабатываем в моей компании. И поэтому использование Ассет должен оказать мне максимальную услугу, как и все инструменты.

Проблема ? Решение !

Вот моя проблема. У всех нас была необходимость построить маршрут в файле JS. Мы все нашли псевдорешение этой проблемы.

  1. Вы вводите на свою страницу (HTML) переменную JS с содержимым Веточка. Эта переменная будет использоваться в файле JavaScript, загружаемом через Ассет. Эффективно, но трудно читается и не очень удобно.
    1
    2
    3
    4
    5
    6
    7
    8
    // шаблон ветки
    <скрипт>
    вар моя переменная = « {{ path(‘my_route’) }}";
    </скрипт>
    // javascript-файл
    $("#sort").on("change", function() {
    window.location.href = myVar + $(this).val();
  2. Вы используете 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 Завтрак не всегда могу предложить.

★ ★ ★ ★ ★