如何在树枝连接字符串

有人知道如何连接树枝中的字符串吗?我想做的事情是:

{{ concat('http://', app.request.host) }}
473005 次浏览

这应该可以正常工作:

\{\{ 'http://' ~ app.request.host }}

在相同的标签中添加一个过滤器,如“trans”

\{\{ ('http://' ~ app.request.host) | trans }}

作为亚当·埃尔索丹尼指出,你也可以使用字符串插值,这需要双引号字符串:

\{\{ "http://#{app.request.host}" }}

在这种情况下,你想输出纯文本和一个变量,你可以这样做:

http://\{\{ app.request.host }}

如果你想连接一些变量,alessandro1997的解决方案会更好。

\{\{ ['foo', 'bar'|capitalize]|join }}

正如你所看到的,这与过滤器和函数一起工作,而不需要在单独的行上使用set

在Symfony中,您可以将此用于协议和主机:

\{\{ app.request.schemeAndHttpHost }}

尽管@alessandro1997给出了一个关于串联的完美答案。

当您需要使用带有连接字符串(或基本数学操作)的过滤器时,您应该使用()来包装它。如:

# EYZ0

混合字符串,变量和翻译,我简单地做以下:

    {% 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>
' %}

尽管所有的东西都混在一起了,但它却像魔法一样有效。

你要找的操作符是Tilde(~),就像Alessandro说的,这里是在文档中:

~:将所有操作数转换为字符串并连接它们。\{\{“你好 " ~名字~ "!"}}将返回(假设名字是“John”)你好,John!。mdash;# EYZ0 < / p >

这里有一个例子在医生的其他地方:

{% set greeting = 'Hello' %}
{% set name = 'Fabien' %}


\{\{ greeting ~ name|lower }}   {# Hello fabien #}


{# use parenthesis to change precedence #}
\{\{ (greeting ~ name)|lower }} {# hello fabien #}

Twig还有一个鲜为人知的功能字符串插值:

\{\{ "http://#{app.request.host}" }}

“\{\{…”-分隔符也可以在字符串中使用:

"http://\{\{ app.request.host }}"

你可以像使用\{\{ foo ~ 'inline string' ~ bar.fieldName }}一样使用~

但是你也可以创建你自己的concat函数来使用它,就像在你的问题中:
# EYZ0: < / p >

在# EYZ0

<?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';
}
}

在# EYZ0:

services:
app.twig_extension:
class: AppBundle\Twig\AppExtension
public: false
tags:
- { name: twig.extension }

快速回答(TL;DR)

  • 树枝字符串连接也可以用format()过滤器完成

详细的回答

上下文

  • 嫩枝2.倍
  • 字符串构建和连接

问题

  • 场景: DeveloperGailSim希望在Twig做字符串连接
    • 这个线程中的其他答案已经解决了concat操作符
    • 这个答案集中在更有表现力的format筛选器上
    • 李< / ul > < / >

    解决方案

    • 另一种方法是使用format过滤器
    • format过滤器的工作原理类似于其他编程语言中的sprintf函数
    • 对于更复杂的字符串,format过滤器可能比~操作符更方便

    Example00

    • example00 string concat bare

      
      
      \{\{ "%s%s%s!"|format('alpha','bravo','charlie') }}
      
      
      --- result --
      
      
      alphabravocharlie!
      
      
      

    Example01

    • example01 string concat with intervening text

      
      
      \{\{ "The %s in %s falls mainly on the %s!"|format('alpha','bravo','charlie') }}
      
      
      --- result --
      
      
      The alpha in bravo falls mainly on the charlie!
      
      
      

    Example02

    • example02 string concat with numeric formatting
    • follows the same syntax as sprintf in other languages

      
      
      \{\{ "The %04d in %04d falls mainly on the %s!"|format(2,3,'tree') }}
      
      
      --- result --
      
      
      The 0002 in 0003 falls mainly on the tree!
      
      
      

    See also