Как конкатенировать строки в веточке

Кто-нибудь знает, как конкатенировать строки в веточке? Я хочу сделать что-то вроде:

{{ concat('http://', app.request.host) }} 

Это должно работать нормально:

 {{ 'http://' ~ app.request.host }} 

Чтобы добавить фильтр – например, ‘trans’ – в том же теге используйте

 {{ ('http://' ~ app.request.host) | trans }} 

Как указывает Адам Элсодани , вы также можете использовать интерполяцию строк , для этого требуются двойные кавычки:

 {{ "http://#{app.request.host}" }} 

Также малоизвестной особенностью Twig является строковая интерполяция :

 {{ "http://#{app.request.host}" }} 

В этом случае, когда вы хотите вывести простой текст и переменную, вы можете сделать это следующим образом:

 http://{{ app.request.host }} 

Если вы хотите объединить некоторые переменные, решение alessandro1997 будет намного лучше.

Оператор, которого вы ищете, – это Тильда (~), как сказал Алессандро, и здесь он находится в документации:

~: Преобразует все операнды в строки и объединяет их. {{“Hello” ~ name ~ “!” }} вернется (при условии, что имя «Джон») Hello John !. – http://twig.sensiolabs.org/doc/templates.html#other-операторы

И вот пример где-то еще в документах :

 {% set greeting = 'Hello' %} {% set name = 'Fabien' %} {{ greeting ~ name|lower }} {# Hello fabien #} {# use parenthesis to change precedence #} {{ (greeting ~ name)|lower }} {# hello fabien #} 
 {{ ['foo', 'bar'|capitalize]|join }} 

Как вы можете видеть, это работает с фильтрами и функциями без необходимости использования set на отдельной строке.

Всякий раз, когда вам нужно использовать фильтр с конкатенированной строкой (или базовой математической операцией), вы должны обернуть ее с помощью (). Например.:

{{ ('http://' ~ app.request.host) | url_encode }}

В Symfony вы можете использовать это для протокола и хоста:

 {{ app.request.schemeAndHttpHost }} 

Хотя @ alessandro1997 дал прекрасный ответ о конкатенации.

Вы можете использовать ~ как {{ foo ~ 'inline string' ~ bar.fieldName }}

Но вы также можете создать свою собственную функцию concat чтобы использовать ее, как в своем вопросе:
{{ concat('http://', app.request.host) }} :

В src/AppBundle/Twig/AppExtension.php

  ['html']]), ]; } public function concat() { return implode('', func_get_args()) } /** * {@inheritdoc} */ public function getName() { return 'app_extension'; } } 

В app/config/services.yml :

 services: app.twig_extension: class: AppBundle\Twig\AppExtension public: false tags: - { name: twig.extension } 

Чтобы смешивать строки, переменные и переводы, я просто делаю следующее:

  {% set add_link = '   ' %} 

Несмотря на то, что все перемешалось, оно работает как шарм.

Быстрый ответ (TL; DR)

  • Конкатенация строки Twig также может быть выполнена с помощью фильтра format()

Детальный ответ

контекст

  • Twig 2.x
  • Строение и конкатенация

проблема

  • Сценарий: DeveloperGailSim хочет выполнить конкатенацию строк в Twig
    • Другие ответы в этой теме уже касаются оператора concat
    • Этот ответ посвящен фильтру format который является более выразительным

Решение

  • Альтернативный подход заключается в использовании фильтра format
  • Фильтр format работает как функция sprintf на других языках программирования
  • Фильтр format может быть менее громоздким, чем оператор ~ для более сложных строк

Example00

  • example00 строка concat bare

     {{"% s% s% s!" | format ('alpha', 'bravo', 'charlie')}}
    
     --- результат -
    
     alphabravocharlie!
    
    

Example01

  • example01 строка concat с промежуточным текстом

     {{«% S в% s в основном зависит от формата% s!" | («Альфа», «браво», «charlie»)}}
    
     --- результат -
    
     Альфа в браво падает в основном на чарли!
    
    

Example02

  • example02 строка concat с цифровым форматированием
  • следует тот же синтаксис, что и sprintf на других языках

     {{«% 04d в% 04d в основном зависит от формата% s!" | (2,3, 'tree')}}
    
     --- результат -
    
     0002 в 0003 падает в основном на дерево!
    
    

Смотрите также

Разделитель «{{…}}” может также использоваться в строках:

 "http://{{ app.request.host }}" 
  • Что означает «статическое» значение в C?
  • Синтаксис Razor обеспечивает непревзойденное преимущество в разметке пользовательского интерфейса?
  • Список волшебных функций Scala
  • Есть ли инструкция goto в Java?
  • Java «?» Оператор для проверки null - что это такое? (Не трогательно!)
  • Что такое разбивка на синтаксис лямбды Java?
  • В чем разница между ними (bCondition == NULL) и (NULL == bCondition)?
  • Что означает тильда перед именем функции в C #?
  • Оператор переключения Java несколько случаев
  • Проверка синтаксиса XML в Java
  • Как избежать% в String.Format?
  • Давайте будем гением компьютера.