小枝テンプレート エンジンを PHP アプリケーションに統合しています。特に、小枝エンジンを使用してフォームをレンダリングしたいと考えています。
symfony2 が twig を使用してフォーム ウィジェットをレンダリングする方法を見てきましたが、次のようなすべてのウィジェットを含む巨大なテンプレート ファイルがあります。
(...)
{% block password_widget %}
{% spaceless %}
{% set type = type|default('password') %}
{{ block('field_widget') }}
{% endspaceless %}
{% endblock password_widget %}
{% block hidden_widget %}
{% set type = type|default('hidden') %}
{{ block('field_widget') }}
{% endblock hidden_widget %}
{% block email_widget %}
{% spaceless %}
{% set type = type|default('email') %}
{{ block('field_widget') }}
{% endspaceless %}
{% endblock email_widget %}
{% block test_widget %}
{% spaceless %}
<div>
{{test}}
<div>
{% endspaceless %}
{% endblock test_widget %}
(...)
問題は、このテンプレートからブロックを「取得」してレンダリングするにはどうすればよいかということです。
これまでのところ、テンプレートをロードし、get ブロックを呼び出してすべてのブロックを取得できます。
twig = new \Twig_Environment($loader, array('cache' => 'cache'));
$template = $twig->loadTemplate('view\form_div_layout.html.twig');
//var_dump($template->getBlocks()); //try getting all blocks
$template->displayBlock('test_widget', array('test' => 'test'));
echo $template->render();
残念ながら、この場合、「test_widget」ブロックだけをレンダリングすることはできません。テンプレートから「test_widget」ブロックを取得し、それを別のテンプレートに挿入してフォーム全体をレンダリングするにはどうすればよいですか?