回答:
これはうまくいくはずです:
{{ 'http://' ~ app.request.host }}
同じタグに「trans」などのフィルターを追加するには
{{ ('http://' ~ app.request.host) | trans }}
アダムElsodaneyが指摘する、あなたも使用できる文字列の補間を、この二重引用符で囲まれた文字列を必要としません。
{{ "http://#{app.request.host}" }}
{% set foo = 'http://' ~ app.request.host %}
。そして、あなたは行うことができます:{{ foo | trans }}
。
{{ form_open('admin/files/?path='~file_path|urlencode)|raw }}
。追加の変数は必要ありません。
また、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 #}
{{ ['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 }
format()
フィルターを使用して行うこともできますformat
より表現力のあるフィルターに焦点を当てていますformat
フィルターを使用することですformat
フィルタは次のように動作しsprintf
、他のプログラミング言語の機能format
フィルタは、より複雑な文字列の〜演算子未満面倒かもしれexample00 string concat bare
{{"%s%s%s!" | format( 'alpha'、 'bravo'、 'charlie')}} ---結果- アルファブラボーチャーリー!
example01文字列連結、間にテキストあり
{{"%sの%sは主に%sに該当します!" | format( 'alpha'、 'bravo'、 'charlie')}} ---結果- ブラボーのアルファは主にチャーリーに当てはまる!
sprintf
他の言語と同じ構文に従います
{{"%04dの%04dは主に%s!に該当します!" | format(2,3、 'tree')}} ---結果- 0003の0002は主に木に落ちます!
「{{...}}」区切り文字は文字列内でも使用できます。
"http://{{ app.request.host }}"