Відповіді:
Це має добре працювати:
{{ 'http://' ~ app.request.host }}
Щоб додати фільтр, як-от "trans", використовуйте те ж тег
{{ ('http://' ~ app.request.host) | trans }}
Як зазначає Адам Елсодані , ви також можете використовувати інтерполяцію рядків , для цього потрібні рядки з подвійним цитуванням:
{{ "http://#{app.request.host}" }}
{% set foo = 'http://' ~ app.request.host %}
. І тоді ви можете зробити: {{ foo | trans }}
.
{{ form_open('admin/files/?path='~file_path|urlencode)|raw }}
Не потрібно зайвої змінної.
Також маловідомою особливістю у Twig є рядкова інтерполяція :
{{ "http://#{app.request.host}" }}
Оператор, якого ви шукаєте, - це Тільда (~), як сказав Алессандро, і ось це в документації:
~: Перетворює всі операнди в рядки і об'єднує їх. {{"Привіт" ~ ім'я ~ "!" }} повернеться (припустимо, що ім'я "Джон") Привіт Джон !. - http://twig.sensiolabs.org/doc/templates.html#other-operators
Ось приклад десь ще в документах :
{% set greeting = 'Hello' %}
{% set name = 'Fabien' %}
{{ greeting ~ name|lower }} {# Hello fabien #}
{# use parenthesis to change precedence #}
{{ (greeting ~ name)|lower }} {# hello fabien #}
У цьому випадку, коли ви хочете вивести звичайний текст і змінну, ви можете це зробити так:
http://{{ app.request.host }}
Якщо ви хочете об'єднати деякі змінні, рішення alessandro1997 було б набагато краще.
{{ ['foo', 'bar'|capitalize]|join }}
Як бачите, це працює з фільтрами та функціями, не потребуючи використання set
окремої лінії.
Кожного разу, коли вам потрібно використовувати фільтр з об'єднаним рядком (або базовою математичною операцією), слід обернути його символами (). Напр .:
{{ ('http://' ~ app.request.host) | url_encode }}
Ви можете використовувати ~
як{{ foo ~ 'inline string' ~ bar.fieldName }}
Але ви також можете створити власну concat
функцію, щоб використовувати її, як у своєму запитанні
{{ concat('http://', app.request.host) }}
::
В 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';
}
}
В app/config/services.yml
:
services:
app.twig_extension:
class: AppBundle\Twig\AppExtension
public: false
tags:
- { name: twig.extension }
format()
фільтромformat
фільтрі, який є більш виразнимformat
фільтраformat
Фільтр працює як sprintf
функції в інших мовах програмуванняformat
Фільтр може бути менш громіздким , ніж оператор для більш складних рядків ~example00 string string concat gore
{{"% s% s% s!" | формат ("альфа", "браво", "Чарлі")}} --- результат - альфабравочарлі!
example01 string concat with inter interting text
{{"% S у% s падає переважно на формат% s!" | ("Альфа", "браво", "чарлі")}} --- результат - Альфа в браво падає в основному на чарлі!
дотримується того ж синтаксису, що і sprintf
в інших мовах
{{"% 04d у% 04d падає переважно на формат% s!" | | (2,3, "дерево")}} --- результат - 0002 в 0003 падає в основному на дерево!
Для змішування рядків, змінних та перекладів я просто виконую наступні дії:
{% 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>
' %}
Незважаючи на те, що все переплутано, це працює як шарм.
Розділювач "{{...}}" - також може використовуватися в межах рядків:
"http://{{ app.request.host }}"