Jawaban:
Ini seharusnya bekerja dengan baik:
{{ 'http://' ~ app.request.host }}
Untuk menambahkan filter - seperti 'trans' - dalam penggunaan tag yang sama
{{ ('http://' ~ app.request.host) | trans }}
Seperti yang ditunjukkan oleh Adam Elsodaney , Anda juga dapat menggunakan interpolasi string , ini membutuhkan string yang dikutip ganda:
{{ "http://#{app.request.host}" }}
{% set foo = 'http://' ~ app.request.host %}
. Dan kemudian Anda bisa lakukan: {{ foo | trans }}
.
{{ form_open('admin/files/?path='~file_path|urlencode)|raw }}
Tidak perlu untuk variabel tambahan.
Fitur yang kurang dikenal di Twig adalah interpolasi string :
{{ "http://#{app.request.host}" }}
Operator yang Anda cari adalah Tilde (~), seperti kata Alessandro, dan ini dia dalam dokumentasi:
~: Mengubah semua operan menjadi string dan menggabungkannya. {{"Hello" ~ name ~ "!" }} akan kembali (dengan asumsi nama adalah 'John') Halo John !. - http://twig.sensiolabs.org/doc/templates.html#other-operators
Dan berikut adalah contoh di tempat lain dalam dokumen :
{% set greeting = 'Hello' %}
{% set name = 'Fabien' %}
{{ greeting ~ name|lower }} {# Hello fabien #}
{# use parenthesis to change precedence #}
{{ (greeting ~ name)|lower }} {# hello fabien #}
Dalam hal ini, di mana Anda ingin menampilkan teks biasa dan variabel, Anda bisa melakukannya seperti ini:
http://{{ app.request.host }}
Jika Anda ingin menggabungkan beberapa variabel, solusi alessandro1997 akan jauh lebih baik.
{{ ['foo', 'bar'|capitalize]|join }}
Seperti yang Anda lihat ini berfungsi dengan filter dan fungsi tanpa harus menggunakan set
pada baris terpisah.
Setiap kali Anda perlu menggunakan filter dengan string bersambung (atau operasi matematika dasar) Anda harus membungkusnya dengan (). Misalnya.:
{{ ('http://' ~ app.request.host) | url_encode }}
Anda bisa menggunakan ~
like{{ foo ~ 'inline string' ~ bar.fieldName }}
Tetapi Anda juga dapat membuat concat
fungsi Anda sendiri untuk menggunakannya seperti dalam pertanyaan Anda
{{ concat('http://', app.request.host) }}
::
Di 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';
}
}
Dalam app/config/services.yml
:
services:
app.twig_extension:
class: AppBundle\Twig\AppExtension
public: false
tags:
- { name: twig.extension }
format()
filterformat
filter yang lebih ekspresifformat
filterformat
Filter bekerja seperti sprintf
fungsi dalam bahasa pemrograman lainformat
Filter mungkin kurang rumit daripada operator ~ untuk string yang lebih kompleksexample00 string concat telanjang
{{"% s% s% s!" | format ('alpha', 'bravo', 'charlie')}} --- hasil - alphabravocharlie!
example01 string concat dengan teks campur tangan
{{"% S dalam% s terutama jatuh pada format% s!" ('Alpha', 'bravo', 'charlie')}} --- hasil - Alfa dalam bravo terutama jatuh pada charlie!
mengikuti sintaksis yang sama seperti sprintf
dalam bahasa lain
{{"% 04d dalam% 04d sebagian besar jatuh pada format% s!" | (2,3, 'pohon')}} --- hasil - 0002 dalam 0003 jatuh terutama di pohon!
Untuk memadukan string, variabel, dan terjemahan, saya cukup melakukan yang berikut:
{% 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>
' %}
Meskipun semuanya dicampuradukkan, itu bekerja seperti pesona.
"{{...}}" - pembatas juga dapat digunakan di dalam string:
"http://{{ app.request.host }}"