![](/img/trans.png)
[英]symfony2 / twig : how to use include in a block used in a form theme?
[英]How to create a custom Symfony2 Twig form template block
我正在開發一個項目,我需要一些自定義表單模板塊。 不是現有塊的修改版本,而是新塊。
我已經能夠創建新的塊並讓Symfony / Twig重新識別和使用它們,但有局限性。
看來表單模板塊有嚴格的命名約定。 模板名稱似乎必須只包含一個下划線。 對下划線之前的單詞似乎也有要求和/或限制。 我已經能夠將form_工作,但沒有別的。 此外,如果使用_widget結束塊的名稱,則不會拋出異常,但如果直接在頁面模板中使用塊,則不會呈現任何內容。 我認為_widget塊只能在form_blocks中使用(true?)。
我的目標是使用項目的首字母縮寫(wwui)命名我所有的新自定義塊,以便讓其他開發人員(以及我自己的某個地方:-)清楚地知道哪些標簽是特定於此項目的。
這就是我為了達到目前的觀點所做的工作:
- 創建Symfony表單自定義文檔中指定的fields.html.twig文件
- 在config.yml中的twig.form.resources中指定該表單
- 使用函數聲明創建一個Twig擴展 - 在我的模板中使用我的新塊
一個簡單的例子:
// TwigExtension.php
...
public function getFunctions()
{
$ret =
[
new \Twig_SimpleFunction( 'wwui_myBlock',
null,
[ 'node_class' => 'Symfony\Bridge\Twig\Node\SearchAndRenderBlockNode',
'is_sage' => [ 'html' ]] ),
...
];
return $ret;
)
{# fields.html.twig #}
{% block wwui_myBlock %}
<p>A simple literal for testing.</p>
{% endblock wwui_myBlock %}
這將拋出異常:
An exception has been thrown during the rendering of a template ("Unable to render the form as none of the following blocks exist: "_siteActivityQueryForm_myBlock", "siteActivityQueryForm_myBlock", "form_myBlock".") in SiteBundle:Queries:activity.html.twig at line 31.
如果我將它重命名為form_byBlock,它可以正常工作。
所以,問題是:
自定義表單塊的正式命名要求和限制是什么。
塊是一個簡單的HTML / Twig代碼塊,可以在子模板中重寫。
我認為這不完全准確。 塊(至少是表單塊)是Twig片段,其被引用為類似於Twig函數(例如, {{ form_widget( form ) }}
)。
我在這里具體詢問表單塊。
許多這些函數在vendor/symfony/symfony/Bridge/Twig/Extension/FormExtension.php
。
其中幾個( form_widget()
, form_errors()
, form_label()
, form_row()
, form_rest()
, form_start()
和form_end()
)由類Symfony\\Bridge\\Twig\\Node\\SearchAndRenderBlockNode
(參見所述getFunctions()
在方法FormExtension.php
)。
這些的Twig片段在vendor/symfony/symfony/src/Symfony/Bridge/Twig/Resources/views/Form/form_div_layout.html.twig
。
我想要做的是創建具有項目特定名稱的新表單塊。
我已經能夠創建新的自定義表單塊(如上所示),但不能創建我想要使用的名稱。
檢查Symfony\\Bridge\\Twig\\Node\\SearchAndRenderBlockNode()
方法沒有產生額外的理解。
事實證明, Symfony\\Bridge\\Twig\\Node\\SearchAndRenderBlockNode()
方法是限制的來源。
還有另一種方法允許我使用我想要的名稱。 它是Symfony\\Bridge\\Twig\\Node\\RenderBlockNode()
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.