php – Twig:選擇某些塊並渲染它們
我將twig模板引擎整合到PHP應用程式中.特別是,我想使用twig引擎來呈現表單.
看看symfony2如何使用twig渲染窗體小部件,它們有一個巨大的模板檔案,其中包含所有的widget,如下所示:
(...) {% 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”塊,然後將其插入到不同的模板中以呈現整個表單,該怎麼辦?
原來,應該使用$template-> renderBlock(‘blockname’,array(‘test’=>’test’));代替.這將使twig渲染該塊,然後返回一個包含該塊的標記的字串.然後可以使用echo顯示它或將其插入到其他模板中.
完整例子:
$loader = new \Twig_Loader_Filesystem(array('/my-template-root')); $twig = new \Twig_Environment($loader, array('debug' => true)); $template = $twig->loadTemplate('view\form_div_layout.html.twig'); $result = $template->renderBlock('blockname', array('test' => 'test')); echo $result;
程式碼日誌版權宣告:
翻譯自:http://stackoverflow.com/questions/7578526/twig-selecting-certain-blocks-and-rendering-them