Risposte:
Questo dovrebbe funzionare bene:
{{ 'http://' ~ app.request.host }}
Per aggiungere un filtro, come "trans", utilizzare lo stesso tag
{{ ('http://' ~ app.request.host) | trans }}
Come sottolinea Adam Elsodaney , puoi anche usare l'interpolazione di stringhe , questo richiede stringhe tra virgolette doppie:
{{ "http://#{app.request.host}" }}
{% set foo = 'http://' ~ app.request.host %}
. E allora si può fare: {{ foo | trans }}
.
{{ form_open('admin/files/?path='~file_path|urlencode)|raw }}
non è necessaria una variabile aggiuntiva.
Anche una caratteristica poco nota in Twig è l'interpolazione di stringhe :
{{ "http://#{app.request.host}" }}
L'operatore che stai cercando è Tilde (~), come ha detto Alessandro, ed eccolo nella documentazione:
~: Converte tutti gli operandi in stringhe e li concatena. {{"Ciao" ~ nome ~ "!" }} ritornerebbe (supponendo che il nome sia "John") Ciao John !. - http://twig.sensiolabs.org/doc/templates.html#other-operators
Ed ecco un esempio da qualche altra parte nei documenti :
{% set greeting = 'Hello' %}
{% set name = 'Fabien' %}
{{ greeting ~ name|lower }} {# Hello fabien #}
{# use parenthesis to change precedence #}
{{ (greeting ~ name)|lower }} {# hello fabien #}
In questo caso, dove si desidera generare testo normale e una variabile, è possibile farlo in questo modo:
http://{{ app.request.host }}
Se si desidera concatenare alcune variabili, la soluzione di alessandro1997 sarebbe molto meglio.
{{ ['foo', 'bar'|capitalize]|join }}
Come puoi vedere, funziona con filtri e funzioni senza la necessità di utilizzarli set
su una linea separata.
Ogni volta che devi usare un filtro con una stringa concatenata (o un'operazione matematica di base), dovresti avvolgerlo con (). Per esempio.:
{{ ('http://' ~ app.request.host) | url_encode }}
Puoi usare ~
come{{ foo ~ 'inline string' ~ bar.fieldName }}
Ma puoi anche creare la tua concat
funzione per usarla come nella tua domanda
{{ concat('http://', app.request.host) }}
:
In 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';
}
}
In app/config/services.yml
:
services:
app.twig_extension:
class: AppBundle\Twig\AppExtension
public: false
tags:
- { name: twig.extension }
format()
filtroformat
filtro che è più espressivoformat
filtroformat
filtro funziona come la sprintf
funzione in altri linguaggi di programmazioneformat
filtro può essere meno ingombrante dell'operatore ~ per stringhe più complessestringa di esempio00 concat nuda
{{"% s% s% s!" | formato ('alpha', 'bravo', 'charlie')}} --- risultato - alphabravocharlie!
stringa di esempio01 concat con il testo intermedio
{{"% S in% s ricade principalmente sul formato% s!" | ('Alpha', 'bravo', 'charlie')}} --- risultato - L'alfa in bravo cade principalmente sul charlie!
segue la stessa sintassi delle sprintf
altre lingue
{{"Il% 04d in% 04d rientra principalmente nel formato% s!" | (2,3, 'albero')}} --- risultato - Il 0002 in 0003 cade principalmente sull'albero!
Per mescolare stringhe, variabili e traduzioni, faccio semplicemente quanto segue:
{% 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>
' %}
Nonostante tutto sia confuso, funziona come un fascino.
Il delimitatore "{{...}}" può essere utilizzato anche nelle stringhe:
"http://{{ app.request.host }}"