Réponses:
Cela devrait fonctionner correctement:
{{ 'http://' ~ app.request.host }}
Pour ajouter un filtre - comme «trans» - dans la même balise, utilisez
{{ ('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 doubles:
{{ "http://#{app.request.host}" }}
{% set foo = 'http://' ~ app.request.host %}
. Et vous pouvez faire: {{ foo | trans }}
.
{{ form_open('admin/files/?path='~file_path|urlencode)|raw }}
pas besoin d'une variable supplémentaire.
L' interpolation de chaînes est également une caractéristique peu connue de Twig :
{{ "http://#{app.request.host}" }}
L'opérateur que vous recherchez est Tilde (~), comme l'a dit Alessandro, et le 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 la documentation :
{% set greeting = 'Hello' %}
{% set name = 'Fabien' %}
{{ greeting ~ name|lower }} {# Hello fabien #}
{# use parenthesis to change precedence #}
{{ (greeting ~ name)|lower }} {# hello fabien #}
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 souhaitez concaténer certaines variables, la solution d'alessandro1997 serait bien meilleure.
{{ ['foo', 'bar'|capitalize]|join }}
Comme vous pouvez le voir, cela fonctionne avec des filtres et des fonctions sans avoir à utiliser 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 des (). Par exemple.:
{{ ('http://' ~ app.request.host) | url_encode }}
Vous pouvez utiliser ~
comme{{ foo ~ 'inline string' ~ bar.fieldName }}
Mais vous pouvez également créer votre propre concat
fonction pour l'utiliser comme dans votre question
{{ concat('http://', app.request.host) }}
::
Dans src/AppBundle/Twig/AppExtension.php
<?php
namespace AppBundle\Twig;
class AppExtension extends \Twig_Extension
{
/**
* {@inheritdoc}
*/
public function getFunctions()
{
return [
new \Twig_SimpleFunction('concat', [$this, 'concat'], ['is_safe' => ['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 }
format()
filtreformat
filtre qui est plus expressifformat
filtreformat
filtre fonctionne comme lesprintf
fonction dans d'autres langages de programmationformat
filtre peut être moins encombrant que l'opérateur ~ pour les chaînes plus complexesexample00 string concat bare
{{"% s% s% s!" | format ('alpha', 'bravo', 'charlie')}} --- résultat -- alphabravocharlie!
exemple01 concaténation de chaîne avec le texte intermédiaire
{{"Le% s dans% s tombe principalement sur le format% s!" | ('Alpha', 'bravo', 'charlie')}} --- résultat -- L'alpha en 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, 'arbre')}} --- résultat -- Le 0002 en 0003 tombe principalement sur l'arbre!
Pour mélanger des chaînes, des variables et des traductions, je fais simplement ce qui suit:
{% set add_link = '
<a class="btn btn-xs btn-icon-only"
title="' ~ 'string.to_be_translated'|trans ~ '"
href="' ~ path('acme_myBundle_link',{'link':link.id}) ~ '">
</a>
' %}
Malgré tout mélangé, cela fonctionne comme un charme.
Le délimiteur "{{...}}" - peut également être utilisé dans les chaînes:
"http://{{ app.request.host }}"