How to concatenate strings in twig

匿名 (未验证) 提交于 2019-12-03 02:08:02

问题:

Anyone knows how to concatenate strings in twig? I want to do something like:

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

回答1:

This should work fine:

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

To add a filter - like 'trans' - in the same tag use

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

As Adam Elsodaney points out, you can also use string interpolation, this does require double quoted strings:

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


回答2:

Also a little known feature in Twig is string interpolation:

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


回答3:

In this case, where you want to output plain text and a variable, you could do it like this:

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

If you want to concatenate some variables, alessandro1997's solution would be much better.



回答4:

The operator you are looking for is Tilde (~), like Alessandro said, and here it is in the documentation:

http://twig.sensiolabs.org/doc/templates.html#other-operators

And here is an example somewhere else in the docs:

{% set greeting = 'Hello' %} {% set name = 'Fabien' %}  {{ greeting ~ name|lower }}   {# Hello fabien #}  {# use parenthesis to change precedence #} {{ (greeting ~ name)|lower }} {# hello fabien #} 


回答5:

{{ ['foo', 'bar'|capitalize]|join }} 

As you can see this works with filters and functions without needing to use set on a seperate line.



回答6:

Whenever you need to use a filter with a concatenated string (or a basic math operation) you should wrap it with ()'s. Eg.:

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



回答7:

In Symfony you can use this for protocol and host:

{{ app.request.schemeAndHttpHost }} 

Though @alessandro1997 gave a perfect answer about concatenation.



回答8:

You can use ~ like {{ foo ~ 'inline string' ~ bar.fieldName }}

But you can also create your own concat function to use it like in your question:
{{ concat('http://', app.request.host) }}:

In src/AppBundle/Twig/AppExtension.php

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

In app/config/services.yml:

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


回答9:

To mix strings, variables and translations I simply do the following:

    {% set add_link = '               ' %} 

Despite everything being mixed up, it works like a charm.



回答10:

Quick Answer (TL;DR)

  • Twig string concatenation may also be done with the format() filter

Detailed Answer

Context

  • Twig 2.x
  • String building and concatenation

Problem

  • Scenario: DeveloperGailSim wishes to do string concatenation in Twig
    • Other answers in this thread already address the concat operator
    • This answer focuses on the format filter which is more expressive

Solution

  • Alternative approach is to use the format filter
  • The format filter works like the sprintf function in other programming languages
  • The format filter may be less cumbersome than the ~ operator for more complex strings

Example00

  • example00 string concat bare

      {{ "%s%s%s!"|format('alpha','bravo','charlie') }}  --- result --  alphabravocharlie!  

Example01

  • example01 string concat with intervening text

      {{ "The %s in %s falls mainly on the %s!"|format('alpha','bravo','charlie') }}  --- result --  The alpha in bravo falls mainly on the charlie!  

Example02

  • example02 string concat with numeric formatting
  • follows the same syntax as sprintf in other languages

      {{ "The %04d in %04d falls mainly on the %s!"|format(2,3,'tree') }}  --- result --  The 0002 in 0003 falls mainly on the tree!  

See also



回答11:

The "{{ ... }}"-delimiter can also be used within strings:

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


标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!