Ответы:
Это должно работать нормально:
{{ '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
Фильтр может быть менее громоздким , чем оператор для более сложных строк ~пример00 строка конкат голая
{{"% s% s% s!" | format ('alpha', 'bravo', 'charlie')}} --- результат - alphabravocharlie!
строка example01, совпадающая с промежуточным текстом
{{"% S в% s приходится в основном на формат% s!" | ("Альфа", "браво", "чарли")}} --- результат - Альфа в браво падает в основном на Чарли!
придерживается того же синтаксиса, что и sprintf
в других языках
{{"% 04d в% 04d в основном приходится на формат% s!" | | (2,3, 'tree')}} --- результат - 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 }}"