twigブロックでテーブルヘッダーを生成し、ページ全体で再利用したいのですが、このページには、ヘッダーがほぼ同じである約5つの異なるテーブルがあります。ブロックコードは次のとおりです。
{% block table_headers %}
<th>Fiscal Year</th>
<th>End Date</th>
<th>Period Length</th>
{% for item in result.FinancialStatements.COAMap.mapItem %}
{% if item.statementType == statementType %}
<th>{{ item._ }} ({{ item.coaItem }})</th>
{% endif %}
{% endfor %}
{% endblock %}
上記のコードの重要な行は
{% if item.statementType == statementType %}
次のように、ブロックをレンダリングしている場所で、statementTypeをパラメーターとして渡します。
{% render block.table_headers with {'statementType': 'INC'} %}
しかし、これは機能しません。概念的な近さのために、ブロックとそのレンダリングを同じファイル(ただし、異なるブロック)に保持したいと考えています。
このようなブロックを使用することも可能ですか?私はSymfony2のドキュメントを確認しましたが、これを実行できることを示唆するものは何も見つかりませんでしたが、私にとっては、明らかにブロックを使用しているようです。
Symfony 2.2のincludeタグにアップデートがあり、これが役立つかもしれません。これは新しいタグの例です:{{ include('FTWGuildBundle:Help:popover.html.twig', {'content':helpContent,'title':helpTitle}) }}
コントローラーへのサブリクエストを行う必要がないため(render
がこれを行う)、パフォーマンスが向上します。
私の例では、ヘルプポップオーバーのHTMLを含め、タイトルとコンテンツを提供しています。
Symfony v2 +(= 3、4、5、Twig v1.28.0)なので、with
キーワードを使用してblock()
関数でカスタムテンプレートを使用できます:
_{% with {
'myVar1': myValue1,
'myVar2': myValue2
}
%}
{{ block('toolbar', myTemplate) }}
{% endwith %}
_
コミット: https://github.com/twigphp/Twig/commit/02b084e2f5c3119604b1c0da388dd2438a012191
{% render block.table_headers with {'statementType': 'INC'} %}
はsymfonyでは認識されません。以下を使用する必要があります。
{% render "yourBundle:controleur:action" with { 'arg1' : 'value1', 'arg2' : 'value2' } %}
それはあなたにとって価値があるもののために。以下は、コンテンツのブロックをレンダリングする方法の例です。これは、メールを送信するバッチアプリ用であるため、試行しているものとは少し異なりますが、それでも役立つ場合があります
$templateContent = $this->getContainer()->get('twig')->loadTemplate('FTWGuildBundle:AuctionNotification:notificationEmail.html.twig');
$body = $templateContent->renderBlock('body', array('siteDomain' => $siteClient->getSiteDomain(), 'staticContentDomain' => $siteClient->getStaticContentDomain(), 'batch' => $batch->getNotifications(), 'auction_notification_lockout_period' => $this->getContainer()->getParameter('auction_notification_lockout_period')));
$subject = ($templateContent->hasBlock("subject")
? $templateContent->renderBlock("subject", array('batchSize' => $batch->getSize(), 'batch' => $batch))
: "Auction House Notifications");
別の方法は、Twig拡張機能を作成することです。
http://symfony.com/doc/current/cookbook/templating/twig_extension.html
あなたのTwig関数はヘッダーのレンダリングを処理します
return $this->renderView("MyBundle:Twig:tableHeader.html.twig", array( 'result' => $result));
キーなしでパラメータを使用してクラスのメソッドを呼び出す
{{ attribute(classname, methodname, [parameter1, parameter2]) }}
キーを持つパラメーターを使用してクラスの任意のメソッドを呼び出す
{{ attribute(classname, methodname, {"parameter1" : parameter1, "parameter2" : parameter2]) }}
配列/オブジェクトのプロパティを取得する
{{ attribute(array, key) }}