Answers:
这应该工作正常:
{{ 'http://' ~ app.request.host }}
要在同一标签中添加过滤器(如“ trans”)
{{ ('http://' ~ app.request.host) | trans }}
正如Adam Elsodaney指出的那样,您还可以使用字符串插值法,这确实需要使用双引号引起来的字符串:
{{ "http://#{app.request.host}" }}
{% set foo = 'http://' ~ app.request.host %}
。然后您可以执行:{{ foo | trans }}
。
{{ form_open('admin/files/?path='~file_path|urlencode)|raw }}
不需要额外的变量。
就像亚历山德罗所说的那样,您要查找的运算符是Tilde(〜),在文档中:
〜:将所有操作数转换为字符串并将它们连接在一起。{{“你好”〜名称〜“!” }}会返回(假设名称为“ John”),您好约翰!– 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 ~ '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字符串concat裸
{{“%s%s%s!” | format('alpha','bravo','charlie')}} -结果- alphabravocharlie!
example01带有中间文本的字符串concat
{{“%s中的%s主要落在%s上!” | format('alpha','bravo','charlie')}} -结果- 勇敢的阿尔法主要落在查理!
遵循与sprintf
其他语言相同的语法
{{“%04d中的%04d主要落在%s上!” | format(2,3,'tree')}} -结果- 0003中的0002主要落在树上!