Odpowiedzi:
To powinno działać dobrze:
{{ 'http://' ~ app.request.host }}
Aby dodać filtr - na przykład „trans” - użyj tego samego znacznika
{{ ('http://' ~ app.request.host) | trans }}
Jak zauważa Adam Elsodaney , można również użyć interpolacji ciągów , wymaga to ciągów podwójnych:
{{ "http://#{app.request.host}" }}
{% set foo = 'http://' ~ app.request.host %}
. : A potem można zrobić: {{ foo | trans }}
.
{{ form_open('admin/files/?path='~file_path|urlencode)|raw }}
Nie potrzeba dodatkowej zmiennej.
Również mało znaną funkcją w Twig jest interpolacja łańcuchów :
{{ "http://#{app.request.host}" }}
Operatorem, którego szukasz, jest Tilde (~), jak powiedział Alessandro, a oto dokumentacja:
~: Konwertuje wszystkie operandy na ciągi i łączy je. {{„„ Hello ”~ name ~”! ” }} wróci (zakładając, że nazywa się „John”) Witaj John! - http://twig.sensiolabs.org/doc/templates.html#other-operators
A oto przykład gdzieś w dokumentach :
{% set greeting = 'Hello' %}
{% set name = 'Fabien' %}
{{ greeting ~ name|lower }} {# Hello fabien #}
{# use parenthesis to change precedence #}
{{ (greeting ~ name)|lower }} {# hello fabien #}
W tym przypadku, gdy chcesz wyprowadzić zwykły tekst i zmienną, możesz to zrobić w następujący sposób:
http://{{ app.request.host }}
Jeśli chcesz połączyć niektóre zmienne, rozwiązanie alessandro1997 byłoby znacznie lepsze.
{{ ['foo', 'bar'|capitalize]|join }}
Jak widać, działa to z filtrami i funkcjami bez konieczności używania set
osobnej linii.
Ilekroć musisz użyć filtru z połączonym łańcuchem (lub podstawową operacją matematyczną), powinieneś owinąć go za pomocą (). Na przykład.:
{{ ('http://' ~ app.request.host) | url_encode }}
Możesz użyć ~
jak{{ foo ~ 'inline string' ~ bar.fieldName }}
Ale możesz także utworzyć własną concat
funkcję, aby używać jej tak jak w pytaniu
{{ concat('http://', app.request.host) }}
:
W 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';
}
}
W app/config/services.yml
:
services:
app.twig_extension:
class: AppBundle\Twig\AppExtension
public: false
tags:
- { name: twig.extension }
format()
filtraformat
filtrze, który jest bardziej ekspresyjnyformat
filtraformat
Filtr działa jak sprintf
funkcja w innych językach programowaniaformat
Filtr może być mniej uciążliwe niż operator ~ o bardziej złożonych łańcuchówprzykład00 ciąg konkat gołe
{{"% s% s% s!" | format („alpha”, „bravo”, „charlie”)}} --- wynik - alphabravocharlie!
przykład01 łańcuch łączący z interweniującym tekstem
{{"% S w% s przypada głównie na format% s!" | („Alpha”, „bravo”, „charlie”)}} --- wynik - Alfa w brawo spada głównie na Charliego!
podlega tej samej składni, co sprintf
w innych językach
{{"% 04d w% 04d przypada głównie na format% s!" | (2,3, „drzewo”)}} --- wynik - 0002 w 0003 spada głównie na drzewo!
Aby mieszać ciągi, zmienne i tłumaczenia, po prostu wykonuję następujące czynności:
{% 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>
' %}
Mimo wszystko pomieszane, działa jak urok.
Separator „{{...}}” może być również używany w ciągach znaków:
"http://{{ app.request.host }}"