誰もが小枝の中で文字列を連結する方法を知っていますか?私は何かをしたいのですが。
{{ 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}" }}
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 #}
この場合、プレーンテキストと変数を出力したい場合は、次のようにします。
http://{{ app.request.Host }}
あなたがいくつかの変数を連結したいならば、alessandro1997の解決策ははるかに良いでしょう。
{{ ['foo', 'bar'|capitalize]|join }}
ご覧のとおり、これはset
を別の行で使用する必要なしに、フィルタと関数で機能します。
連結文字列(または基本的な数学演算)でフィルタを使用する必要があるときはいつでも、それを()でラップする必要があります。例えば。:
{{ ('http://' ~ app.request.Host) | url_encode }}
Symfonyではプロトコルとホストにこれを使うことができます:
{{ app.request.schemeAndHttpHost }}
@ alessandro1997が連結について完璧な答えを出しましたが。
~
を{{ 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 }
文字列、変数、翻訳を混ぜ合わせるには、単純に次のようにします。
{% 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>
' %}
すべてが混同されているにもかかわらず、それは魅力のように機能します。
format()
フィルタでも可能です。format
フィルタに焦点を当てていますformat
フィルタを使うことですformat
フィルタは、他のプログラミング言語のsprintf
関数と同じように機能します。format
フィルタは、より複雑な文字列に対して〜演算子より煩わしくないかもしれません。example00文字列連結ベア
{{"%s%s%s!" |形式( 'alpha'、 'bravo'、 'charlie')}} - - 結果 - alphabravocharlie!
example01文字列と中間テキスト
{{"%s内の%sは主に%sに該当します!" |((alpha)、 'bravo'、 'charlie')}} [ ---結果 - ブラボーのアルファは主にチャーリーの上に落ちます!
他の言語のsprintf
と同じ構文に従います
{{"%04d内の%04dは主に%sにあります!" |(2、3、 'tree')}} --- result - [.____。0003 0003の0002は主に木の上に落ちます!