小枝の文字列を連結する方法を知っている人はいますか?私は次のようなことをしたい:
{{ concat('http://', app.request.host) }}
小枝の文字列を連結する方法を知っている人はいますか?私は次のようなことをしたい:
{{ concat('http://', app.request.host) }}
これは正常に機能するはずです。
{{ 'http://' ~ app.request.host }}
同じタグに「trans」のようなフィルターを追加するには、
{{ ('http://' ~ app.request.host) | trans }}
Adam Elsodaneyが指摘しているように、文字列補間を使用することもできます。これには、二重引用符で囲まれた文字列が必要です。
{{ "http://#{app.request.host}" }}
また、Twigのあまり知られていない機能は、文字列補間です。
{{ "http://#{app.request.host}" }}
あなたが探している演算子は、アレッサンドロが言ったように、チルダ(〜)であり、ここにそれがドキュメントにあります:
〜:すべてのオペランドを文字列に変換して連結します。{{"こんにちは"〜名前〜 "!" }}が返されます(名前が「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 #}
この場合、プレーンテキストと変数を出力する場合は、次のように実行できます。
http://{{ app.request.host }}
いくつかの変数を連結したい場合は、alessandro1997のソリューションの方がはるかに優れています。
{{ ['foo', 'bar'|capitalize]|join }}
ご覧のとおり、これはset
別の行で使用しなくてもフィルターと関数で機能します。
連結された文字列(または基本的な数学演算)でフィルターを使用する必要がある場合は常に、()でラップする必要があります。例えば。:
{{ ('http://' ~ app.request.host) | url_encode }}
あなたは~
のように使うことができます{{ 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 }
Symfonyでは、プロトコルとホストにこれを使用できます。
{{ app.request.schemeAndHttpHost }}
@ alessandro1997は、連結について完璧な答えを出しましたが。
format()
フィルターを使用して行うこともできますformat
より表現力豊かなフィルターに焦点を当てていますformat
フィルターを使用することですformat
フィルタは、他のプログラミング言語の関数と同じように機能sprintf
しますformat
フィルターは〜演算子よりも扱いにくい場合があります。example00 string concat bare
{{"%s%s%s!" | format('alpha'、'bravo'、'charlie')}} - - 結果 - alphabravocharlie!
example01文字列とテキストの連結
{{"%sの%sは主に%sに該当します!" | format('alpha'、'bravo'、'charlie')}} - - 結果 - ブラボーのアルファは主にチャーリーに当てはまります!
sprintf
他の言語と同じ構文に従います
{{"%04dの%04dは主に%sに分類されます!" | format(2,3、'tree')}} - - 結果 - 0003の0002は主に木に落ちます!
文字列、変数、翻訳を組み合わせるには、次のようにします。
{% 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>
' %}
すべてが混同されているにもかかわらず、それは魅力のように機能します。
「{{...}}」-区切り文字は、文字列内でも使用できます。
"http://{{ app.request.host }}"