web-dev-qa-db-ja.com

小枝の中で文字列を連結する方法

誰もが小枝の中で文字列を連結する方法を知っていますか?私は何かをしたいのですが。

{{ concat('http://', app.request.Host) }}
386
stoefln

これはうまくいくはずです。

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

同じタグに「trans」のようなフィルタを追加するには

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

Adam Elsodaneyが指摘しているように文字列補間を使用することもできます 、これには二重引用符で囲まれた文字列が必要です。

{{ "http://#{app.request.Host}" }}
774

Twigのもう少し知られている機能は 文字列補間 :です。

{{ "http://#{app.request.Host}" }}
76
Adam Elsodaney

Alessandroが言ったように、あなたが探している演算子はTilde(〜)です、そしてここでそれはドキュメンテーションにあります:

〜:すべてのオペランドを文字列に変換して連結します。 {{"こんにちは"〜名前〜 "!" (nameが 'John'であると仮定します)こんにちは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 #}
23
Nabil Kadimi

この場合、プレーンテキストと変数を出力したい場合は、次のようにします。

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

あなたがいくつかの変数を連結したいならば、alessandro1997の解決策ははるかに良いでしょう。

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

ご覧のとおり、これはsetを別の行で使用する必要なしに、フィルタと関数で機能します。

12
Simon Epskamp

連結文字列(または基本的な数学演算)でフィルタを使用する必要があるときはいつでも、それを()でラップする必要があります。例えば。:

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

11
lsouza

Symfonyではプロトコルとホストにこれを使うことができます:

{{ app.request.schemeAndHttpHost }}

@ alessandro1997が連結について完璧な答えを出しましたが。

6
Minras

~{{ 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 }
4
luchaninov

文字列、変数、翻訳を混ぜ合わせるには、単純に次のようにします。

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

すべてが混同されているにもかかわらず、それは魅力のように機能します。

1
Gingi

クイックアンサー(TL; DR)

  • 小文字列の連結はformat()フィルタでも可能です。

詳細な回答

コンテキスト

  • 小枝2.x
  • 文字列の作成と連結

問題

  • シナリオ: DeveloperGailSimはTwig で文字列連結をしたいと思っています
    • このスレッド内の他の回答はすでにconcat演算子に対処しています
    • この答えはもっと表現力豊かなformatフィルタに焦点を当てています

溶液

  • 別の方法はformatフィルタを使うことです
  • formatフィルタは、他のプログラミング言語のsprintf関数と同じように機能します。
  • formatフィルタは、より複雑な文字列に対して〜演算子より煩わしくないかもしれません。

Example00

  • example00文字列連結ベア

     
     {{"%s%s%s!" |形式( 'alpha'、 'bravo'、 'charlie')}} 
     
      -  - 結果 -  
     
     alphabravocharlie!
     
    

Example01

  • example01文字列と中間テキスト

     
     {{"%s内の%sは主に%sに該当します!" |((alpha)、 'bravo'、 'charlie')}} 
     [ ---結果 -  
     
    ブラボーのアルファは主にチャーリーの上に落ちます!
     
    

Example02

  • example02文字列連結と数値フォーマット
  • 他の言語のsprintfと同じ構文に従います

     
     {{"%04d内の%04dは主に%sにあります!" |(2、3、 'tree')}} 
     
     --- result  -  
     [.____。0003 0003の0002は主に木の上に落ちます!
     
    

また見なさい

0
dreftymac