如何连接树枝中的string
任何人都知道如何连接树枝中的string? 我想做一些事情:
{{ concat('http://', app.request.host) }}
这应该工作正常:
{{ 'http://' ~ app.request.host }}
要添加一个filter – 像“trans” – 在相同的标签使用
{{ ('http://' ~ app.request.host) | trans }}
正如Adam Elsodaney指出的 ,你也可以使用string插值 ,这需要双引号string:
{{ "http://#{app.request.host}" }}
另外Twig中一个鲜为人知的特性是string插值 :
{{ "http://#{app.request.host}" }}
在这种情况下,你想输出纯文本和variables,你可以这样做:
http://{{ app.request.host }}
如果你想连接一些variables,alessandro1997的解决scheme会更好。
你正在寻找的运营商是Tilde(〜),就像Alessandro说的那样,这里是在文档中:
〜:将所有操作数转换为string并连接它们。 {{“Hello”〜name〜“!” }}会返回(假设名字是'John')Hello 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 #}
{{ ['foo', 'bar'|capitalize]|join }}
正如你所看到的,这可以使用filter和函数,而不需要使用单独的一行。
无论何时你需要使用一个连接string的filter(或者一个基本的math运算),你应该用()来包装它。 例如。:
{{ ('http://' ~ app.request.host) | url_encode }}
在Symfony中,你可以使用这个协议和主机:
{{ app.request.schemeAndHttpHost }}
虽然@ alessandro1997给出了关于连接的完美答案。
你可以使用~
{{ foo ~ 'inline string' ~ bar.fieldName }}
但是你也可以创build你自己的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 }
快速回答(TL; DR)
- Twigstring连接也可以使用
format()
filter来完成
详细的答案
上下文
- 树枝2.x
- stringbuild立和连接
问题
- 场景: DeveloperGailSim希望在Twig中进行string连接
- 这个线程中的其他答案已经解决了concat操作符
- 这个答案侧重于更具performance力的
format
filter
解
- 另一种方法是使用
format
filter -
format
filter的工作原理与其他编程语言中的sprintf
函数类似 - 对于更复杂的string,
format
filter可能比〜运算符更简单
Example00
-
example00stringconcat裸露
{{“%s%s%s!”|格式('alpha','bravo','charlie')}} ---结果 - alphabravocharlie!
Example01
-
example01带有插入文本的stringconcat
{{“%s中的%s主要落在%s!”|格式('alpha','bravo','charlie')}} ---结果 - 在布拉沃阿尔法主要落在查理!
Example02
- example02string连字符与数字格式
-
遵循与其他语言中的
sprintf
相同的语法{{“%04d中的%04d主要落在%s!”|格式(2,3,'tree')}} ---结果 - 0003中的0002主要落在树上!
也可以看看
要混合string,variables和翻译,我只需执行以下操作:
{% 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> ' %}
尽pipe一切都混在一起,它就像一个魅力。
“{{…}}”分隔符也可以在string中使用:
"http://{{ app.request.host }}"