如何创建自定义的Symfony2 Twig表单模板块

我正在为我需要一些自定义表单模板块的项目工作。 不是现有块的修改版本,而是新块。

我已经能够创建新的模块并获得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' => 'SymfonyBridgeTwigNodeSearchAndRenderBlockNode',
'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,它可以正常工作。

所以,问题是:
自定义表单块的正式命名要求和限制是什么?


更新日期27-Aug-2015 09:30
有关@lxg发表评论的其他信息:

块很简单,可以在子模板中覆盖一段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() )中的一些是由类SymfonyBridgeTwigNodeSearchAndRenderBlockNode所述getFunctions()在方法FormExtension.php )。

Twig snippets for these are defined in vendor/symfony/symfony/src/Symfony/Bridge/Twig/Resources/views/Form/form_div_layout.html.twig

我想要做的是创建具有项目特定名称的新窗体块。

我已经能够创建新的自定义窗体块(如上所示),但不能使用我想要使用的名称。

检查SymfonyBridgeTwigNodeSearchAndRenderBlockNode()方法没有得到额外的理解。


原来, SymfonyBridgeTwigNodeSearchAndRenderBlockNode()方法是限制来自哪里。

还有另一种方法可以让我使用我想要的名称。 它是SymfonyBridgeTwigNodeRenderBlockNode()

链接地址: http://www.djcxy.com/p/81397.html

上一篇: How to create a custom Symfony2 Twig form template block

下一篇: Wrap Symfony form fields in a div in Twig