Câu trả lời:
Điều này sẽ hoạt động tốt:
{{ 'http://' ~ app.request.host }}
Để thêm bộ lọc - như 'trans' - trong cùng một thẻ, hãy sử dụng
{{ ('http://' ~ app.request.host) | trans }}
Như Adam Elsodaney chỉ ra , bạn cũng có thể sử dụng phép nội suy chuỗi , điều này không yêu cầu chuỗi trích dẫn kép:
{{ "http://#{app.request.host}" }}
{% set foo = 'http://' ~ app.request.host %}
. Và sau đó bạn có thể làm : {{ foo | trans }}
.
{{ form_open('admin/files/?path='~file_path|urlencode)|raw }}
Không cần thêm biến.
Ngoài ra một tính năng ít được biết đến trong Twig là nội suy chuỗi :
{{ "http://#{app.request.host}" }}
Toán tử mà bạn đang tìm kiếm là Tilde (~), như Alessandro đã nói, và đây là trong tài liệu:
~: Chuyển đổi tất cả các toán hạng thành chuỗi và nối chúng. {{"Xin chào" ~ tên ~ "!" }} sẽ trở lại (giả sử tên là 'John') Xin chào John!. - http://twig.sensiolabs.org/doc/temsheet.html#other-operators
Và đây là một ví dụ ở một nơi khác trong các tài liệu :
{% set greeting = 'Hello' %}
{% set name = 'Fabien' %}
{{ greeting ~ name|lower }} {# Hello fabien #}
{# use parenthesis to change precedence #}
{{ (greeting ~ name)|lower }} {# hello fabien #}
Trong trường hợp này, nơi bạn muốn xuất văn bản đơn giản và một biến, bạn có thể làm như thế này:
http://{{ app.request.host }}
Nếu bạn muốn nối một số biến, giải pháp của alessandro1997 sẽ tốt hơn nhiều.
{{ ['foo', 'bar'|capitalize]|join }}
Như bạn có thể thấy điều này hoạt động với các bộ lọc và chức năng mà không cần sử dụng set
trên một dòng riêng biệt.
Bạn có thể sử dụng ~
như{{ foo ~ 'inline string' ~ bar.fieldName }}
Nhưng bạn cũng có thể tạo concat
chức năng của riêng mình để sử dụng nó như trong câu hỏi của bạn
{{ concat('http://', app.request.host) }}
::
Trong 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';
}
}
Trong app/config/services.yml
:
services:
app.twig_extension:
class: AppBundle\Twig\AppExtension
public: false
tags:
- { name: twig.extension }
format()
bộ lọcformat
bộ lọc có tính biểu cảm cao hơnformat
bộ lọcformat
lọc hoạt động giống như sprintf
chức năng trong các ngôn ngữ lập trình khácformat
lọc có thể ít cồng kềnh hơn toán tử ~ cho các chuỗi phức tạp hơnchuỗi concat trần
{{"% s% s% s!" | định dạng ('alpha', 'bravo', 'charlie')}} --- kết quả -- alphabravocharlie!
concat chuỗi example01 với văn bản can thiệp
{{"% S trong% s rơi chủ yếu vào định dạng% s!" | ('Alpha', 'bravo', 'charlie')}} --- kết quả -- Các alpha trong bravo rơi chủ yếu trên charlie!
theo cú pháp giống như sprintf
trong các ngôn ngữ khác
{{"% 04d trong% 04d rơi chủ yếu vào định dạng% s!" | (2,3, 'cây')}} --- kết quả -- 0002 trong 0003 rơi chủ yếu trên cây!
Để trộn chuỗi, biến và dịch tôi chỉ cần làm như sau:
{% 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>
' %}
Mặc dù mọi thứ được trộn lẫn, nó hoạt động như một nét duyên dáng.
"{{...}}" - dấu phân cách cũng có thể được sử dụng trong các chuỗi:
"http://{{ app.request.host }}"