Antworten:
Dies sollte gut funktionieren:
{{ 'http://' ~ app.request.host }}
Um einen Filter - wie 'trans' - im selben Tag hinzuzufügen, verwenden Sie
{{ ('http://' ~ app.request.host) | trans }}
Wie Adam Elsodaney betont, können Sie auch die Zeichenfolgeninterpolation verwenden . Dies erfordert Zeichenfolgen in doppelten Anführungszeichen:
{{ "http://#{app.request.host}" }}
{% set foo = 'http://' ~ app.request.host %}
. Und dann können Sie tun : {{ foo | trans }}
.
{{ form_open('admin/files/?path='~file_path|urlencode)|raw }}
Keine zusätzliche Variable erforderlich.
Ein wenig bekanntes Merkmal in Twig ist auch die String-Interpolation :
{{ "http://#{app.request.host}" }}
Der Operator, den Sie suchen, ist Tilde (~), wie Alessandro sagte, und hier ist es in der Dokumentation:
~: Konvertiert alle Operanden in Zeichenfolgen und verkettet sie. {{"Hallo" ~ Name ~ "!" }} würde zurückkehren (vorausgesetzt der Name ist 'John') Hallo John!. - http://twig.sensiolabs.org/doc/templates.html#other-operators
Und hier ist ein Beispiel irgendwo anders in den Dokumenten :
{% set greeting = 'Hello' %}
{% set name = 'Fabien' %}
{{ greeting ~ name|lower }} {# Hello fabien #}
{# use parenthesis to change precedence #}
{{ (greeting ~ name)|lower }} {# hello fabien #}
In diesem Fall, in dem Sie einfachen Text und eine Variable ausgeben möchten, können Sie dies folgendermaßen tun:
http://{{ app.request.host }}
Wenn Sie einige Variablen verketten möchten, ist die Lösung von alessandro1997 viel besser.
{{ ['foo', 'bar'|capitalize]|join }}
Wie Sie sehen, funktioniert dies mit Filtern und Funktionen, ohne dass set
eine separate Zeile verwendet werden muss.
Wann immer Sie einen Filter mit einer verketteten Zeichenfolge (oder einer grundlegenden mathematischen Operation) verwenden müssen, sollten Sie ihn mit () umschließen. Z.B.:
{{ ('http://' ~ app.request.host) | url_encode }}
Sie können ~
wie verwenden{{ foo ~ 'inline string' ~ bar.fieldName }}
Sie können aber auch eigene erstellen concat
Funktion , es zu benutzen , wie in Ihrer Frage:
{{ concat('http://', app.request.host) }}
:
Im 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()
Filter erfolgenformat
Filter, der aussagekräftiger istformat
Filtersformat
Filter funktioniert wie die sprintf
Funktion in anderen Programmiersprachenformat
Filter ist für komplexere Zeichenfolgen möglicherweise weniger umständlich als der Operator ~example00 string concat bare
{{"% s% s% s!" | Format ('alpha', 'bravo', 'charlie')}} --- Ergebnis - alphabravocharlie!
example01 string concat mit dazwischenliegendem text
{{"Das% s in% s fällt hauptsächlich auf das Format% s!" | ('Alpha', 'bravo', 'charlie')}} --- Ergebnis - Das Alpha in Bravo fällt hauptsächlich auf die Charlie!
folgt der gleichen Syntax wie sprintf
in anderen Sprachen
{{"% 04d in% 04d fällt hauptsächlich auf das Format% s!" | (2,3, 'tree')}} --- Ergebnis - Die 0002 in 0003 fällt hauptsächlich auf den Baum!
Um Strings, Variablen und Übersetzungen zu mischen, mache ich einfach Folgendes:
{% 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>
' %}
Obwohl alles durcheinander ist, funktioniert es wie ein Zauber.
Das Trennzeichen "{{...}}" kann auch in Zeichenfolgen verwendet werden:
"http://{{ app.request.host }}"