如何连接树枝中的字符串

发布于 2024-12-08 19:08:40 字数 101 浏览 1 评论 0原文

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

{{ concat('http://', app.request.host) }}

Anyone knows how to concatenate strings in twig? I want to do something like:

{{ concat('http://', app.request.host) }}

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(11

心凉怎暖 2024-12-15 19:08:40

这应该可以正常工作:

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

要在同一标签中添加过滤器(例如“trans”),请使用

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

正如Adam Elsodaney指出的,您还可以使用 字符串插值,这确实需要双引号字符串:

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

This should work fine:

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

To add a filter - like 'trans' - in the same tag use

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

As Adam Elsodaney points out, you can also use string interpolation, this does require double quoted strings:

{{ "http://#{app.request.host}" }}
厌倦 2024-12-15 19:08:40

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

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

Also a little known feature in Twig is string interpolation:

{{ "http://#{app.request.host}" }}
ヤ经典坏疍 2024-12-15 19:08:40

您要查找的运算符是波浪号 (~),就像 Alessandro 所说,它位于文档中:

~:将所有操作数转换为字符串并连接它们。 {{ “你好
" ~ name ~ "!" }} 将返回(假设名称为“John”)Hello John!。 – http://twig.symfony.com/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 #}

The operator you are looking for is Tilde (~), like Alessandro said, and here it is in the documentation:

~: Converts all operands into strings and concatenates them. {{ "Hello
" ~ name ~ "!" }} would return (assuming name is 'John') Hello John!. – http://twig.symfony.com/doc/templates.html#other-operators

And here is an example somewhere else in the docs:

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

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

{# use parenthesis to change precedence #}
{{ (greeting ~ name)|lower }} {# hello fabien #}
怀念你的温柔 2024-12-15 19:08:40

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

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

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

In this case, where you want to output plain text and a variable, you could do it like this:

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

If you want to concatenate some variables, alessandro1997's solution would be much better.

苦行僧 2024-12-15 19:08:40
{{ ['foo', 'bar'|capitalize]|join }}

正如您所看到的,这适用于过滤器和函数,而无需在单独的行上使用 set

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

As you can see this works with filters and functions without needing to use set on a seperate line.

小嗷兮 2024-12-15 19:08:40

每当您需要使用带有连接字符串(或基本数学运算)的过滤器时,您应该用 () 括起来。例如:

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

Whenever you need to use a filter with a concatenated string (or a basic math operation) you should wrap it with ()'s. Eg.:

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

虚拟世界 2024-12-15 19:08:40

您可以像 {{ 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/ 中配置/services.yml:

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

You can use ~ like {{ foo ~ 'inline string' ~ bar.fieldName }}

But you can also create your own concat function to use it like in your question:
{{ concat('http://', app.request.host) }}:

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

In app/config/services.yml:

services:
    app.twig_extension:
        class: AppBundle\Twig\AppExtension
        public: false
        tags:
            - { name: twig.extension }
青柠芒果 2024-12-15 19:08:40

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

{{ app.request.schemeAndHttpHost }}

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

In Symfony you can use this for protocol and host:

{{ app.request.schemeAndHttpHost }}

Though @alessandro1997 gave a perfect answer about concatenation.

隔岸观火 2024-12-15 19:08:40

快速回答(TL;DR)

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

详细答案

上下文

  • Twig 2.x
  • 字符串构建和连接

问题

  • 场景: DeveloperGailSim 希望在 Twig 中进行字符串连接
    • 此线程中的其他答案已经解决了 concat 运算符
    • 此答案重点关注更具表现力的格式过滤器

解决方案

  • 替代方法是使用 format 过滤器
  • format< /code> 过滤器的工作方式类似于其他编程语言中的 sprintf 函数
  • 对于更复杂的字符串,format 过滤器可能比 ~ 运算符更方便

Example00

  • example00 string concat bare

    <前>
    {{ "%s%s%s!"|format('alpha','bravo','charlie') }}

    - - 结果 -

    阿尔法布拉沃查理!

示例01

  • example01 字符串连接与中间文本

    <前>
    {{ "%s 中的 %s 主要落在 %s!"|format('alpha','bravo','charlie') }}

    - - 结果 -

    《Bravo》中的阿尔法主要落在查理身上!

Example02

  • example02 字符串连接与数字格式

  • 遵循与其他语言中的sprintf相同的语法

    <前>
    {{“%04d 中的 %04d 主要落在 %s 上!”|format(2,3,'tree') }}

    - - 结果 -

    0003中的0002主要落在树上!

另请参阅

Quick Answer (TL;DR)

  • Twig string concatenation may also be done with the format() filter

Detailed Answer

Context

  • Twig 2.x
  • String building and concatenation

Problem

  • Scenario: DeveloperGailSim wishes to do string concatenation in Twig
    • Other answers in this thread already address the concat operator
    • This answer focuses on the format filter which is more expressive

Solution

  • Alternative approach is to use the format filter
  • The format filter works like the sprintf function in other programming languages
  • The format filter may be less cumbersome than the ~ operator for more complex strings

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

清眉祭 2024-12-15 19:08:40

为了混合字符串、变量和翻译,我只需执行以下操作:

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

尽管所有内容都混合在一起,但它的工作方式就像一个魅力。

To mix strings, variables and translations I simply do the following:

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

Despite everything being mixed up, it works like a charm.

眼泪淡了忧伤 2024-12-15 19:08:40

“{{ ... }}”分隔符也可以在字符串中使用:

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

The "{{ ... }}"-delimiter can also be used within strings:

"http://{{ app.request.host }}"
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文