514

小枝の文字列を連結する方法を知っている人はいますか?私は次のようなことをしたい:

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

11 に答える 11

976

これは正常に機能するはずです。

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

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

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

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

{{ "http://#{app.request.host}" }}
于 2011-10-09T16:33:07.453 に答える
105

また、Twigのあまり知られていない機能は、文字列補間です。

{{ "http://#{app.request.host}" }}
于 2014-07-11T08:44:15.850 に答える
29

あなたが探している演算子は、アレッサンドロが言ったように、チルダ(〜)であり、ここにそれがドキュメントにあります:

〜:すべてのオペランドを文字列に変換して連結します。{{"こんにちは"〜名前〜 "!" }}が返されます(名前が「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 #}
于 2014-02-01T13:30:27.473 に答える
22

この場合、プレーンテキストと変数を出力する場合は、次のように実行できます。

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

いくつかの変数を連結したい場合は、alessandro1997のソリューションの方がはるかに優れています。

于 2011-10-09T17:49:27.870 に答える
16
{{ ['foo', 'bar'|capitalize]|join }}

ご覧のとおり、これはset別の行で使用しなくてもフィルターと関数で機能します。

于 2012-06-11T12:15:46.797 に答える
11

連結された文字列(または基本的な数学演算)でフィルターを使用する必要がある場合は常に、()でラップする必要があります。例えば。:

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

于 2013-07-28T17:53:05.120 に答える
8

あなたは~のように使うことができます{{ 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 }
于 2015-11-10T22:58:49.200 に答える
6

Symfonyでは、プロトコルとホストにこれを使用できます。

{{ app.request.schemeAndHttpHost }}

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

于 2013-05-07T16:26:41.883 に答える
5

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

  • 小枝の文字列の連結は、format()フィルターを使用して行うこともできます

詳細な回答

コンテクスト

  • Twig 2.x
  • 文字列の構築と連結

問題

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

解決

  • 別のアプローチは、formatフィルターを使用することです
  • formatフィルタは、他のプログラミング言語の関数と同じように機能sprintfします
  • より複雑な文字列の場合、formatフィルターは〜演算子よりも扱いにくい場合があります。

Example00

  • example00 string concat bare

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

Example01

  • example01文字列とテキストの連結

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

Example02

  • example02数値形式の文字列連結
  • sprintf他の言語と同じ構文に従います

    {{"%04dの%04dは主に%sに分類されます!" | format(2,3、'tree')}}
    
    - - 結果  - 
    
    0003の0002は主に木に落ちます!
    
    

も参照してください

于 2017-03-10T21:19:29.120 に答える
3

文字列、変数、翻訳を組み合わせるには、次のようにします。

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

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

于 2014-01-10T15:40:48.533 に答える
-1

「{{...}}」-区切り文字は、文字列内でも使用できます。

"http://{{ app.request.host }}"
于 2015-07-14T09:07:40.693 に答える