2015-07-05 2 views
0

Есть ли способ в Twig для замены определенной строки A другой строкой B на всей системе? Это означает, что всякий раз, когда я вывожу что-либо (переменное, статическое содержимое, перевод, ...), есть процесс, который проверяет содержимое для A и заменяет его на B.Twig: Заменить каждый экземпляр строки

Есть ли какой-либо прослушиватель или событие, сделать это?

Я знаю, что есть фильтры replace в Twig, но я не хочу их определять во всех случаях, но убедитесь, что он будет заменен повсюду.

ответ

1

Первым решением будет определение пользовательского «посетителя узла» для Twig. Twig_NodeVisitor_Optimizer - пример того, как изменить содержимое шаблона без необходимости добавлять какую-либо специальную функцию, фильтр или тег.

Однако, определение «узла посетителя» является чрезвычайно сложным, и я бы рекомендовал вам вместо того, чтобы решить эту проблему альтернативным способом:

  • Если вы используете Twig в Symfony, используйте kernel.response event, чтобы получить ответьте и примените простую функцию str_replace() или preg_replace() до ее содержимого, прежде чем доставить их пользователю.
  • Если вы используете Twig независимо, примените ту же технику к выходу, сгенерированному методом render().
Смежные вопросы