Tout le monde sait comment concaténer des chaînes en brindille? Je veux faire quelque chose comme:
{{ concat('http://', app.request.host) }}
Cela devrait bien fonctionner:
{{ 'http://' ~ app.request.host }}
Pour append un filtre – comme «trans» – dans la même balise
{{ ('http://' ~ app.request.host) | trans }}
Comme le souligne Adam Elsodaney , vous pouvez également utiliser l’ interpolation de chaînes , cela nécessite des chaînes entre guillemets:
{{ "http://#{app.request.host}" }}
L’ interpolation de chaîne est également une caractéristique peu connue de Twig:
{{ "http://#{app.request.host}" }}
Dans ce cas, où vous voulez sortir du texte brut et une variable, vous pouvez le faire comme ceci:
http://{{ app.request.host }}
Si vous voulez concaténer certaines variables, la solution alessandro1997 serait bien meilleure.
L’opérateur que vous recherchez est Tilde (~), comme Alessandro l’a dit, et la voici dans la documentation:
~: Convertit tous les opérandes en chaînes et les concatène. {{“Bonjour” ~ nom ~ “!” }} retournerait (en supposant que le nom est «John») Bonjour John !. – http://twig.sensiolabs.org/doc/templates.html#other-operators
Et voici un exemple ailleurs dans les docs :
{% 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 }}
Comme vous pouvez le voir, cela fonctionne avec des filtres et des fonctions sans avoir besoin d’utiliser un set
sur une ligne séparée.
Chaque fois que vous devez utiliser un filtre avec une chaîne concaténée (ou une opération mathématique de base), vous devez l’envelopper avec (). Par exemple.:
{{ ('http://' ~ app.request.host) | url_encode }}
Dans Symfony, vous pouvez l’utiliser pour le protocole et l’hôte:
{{ app.request.schemeAndHttpHost }}
Bien que @ alessandro1997 ait donné une réponse parfaite à propos de la concaténation.
Vous pouvez utiliser ~
comme {{ foo ~ 'inline ssortingng' ~ bar.fieldName }}
Mais vous pouvez également créer votre propre fonction de concat
pour l’utiliser comme dans votre question:
{{ concat('http://', app.request.host) }}
:
Dans src/AppBundle/Twig/AppExtension.php
['html']]), ]; } public function concat() { return implode('', func_get_args()) } /** * {@inheritdoc} */ public function getName() { return 'app_extension'; } }
Dans app/config/services.yml
:
services: app.twig_extension: class: AppBundle\Twig\AppExtension public: false tags: - { name: twig.extension }
Pour mélanger des chaînes, des variables et des traductions, je fais simplement ce qui suit:
{% set add_link = ' ' %}
Malgré tout mélangé, cela fonctionne comme un charme.
format()
format
qui est plus expressif format
format
fonctionne comme la fonction sprintf
dans d’autres langages de programmation format
peut être moins lourd que l’opérateur ~ pour les chaînes plus complexes exemple00 chaîne concat nue
{{"% s% s% s!" | format ('alpha', 'bravo', 'charlie')}} --- résultat -- alphabravocharlie!
example01 ssortingng concat avec un texte intermédiaire
{{"Le% s dans% s tombe principalement sur le format% s!" ('Alpha', 'bravo', 'charlie')}} --- résultat -- L'alpha in bravo tombe principalement sur la charlie!
suit la même syntaxe que sprintf
dans d’autres langues
{{"Le% 04d dans% 04d tombe principalement sur le format% s!" | (2,3, 'tree')}} --- résultat -- Le 0002 en 0003 tombe principalement sur l'arbre!
Le “{{…}}” – délimiteur peut également être utilisé dans les chaînes:
"http://{{ app.request.host }}"