Forms 如何创建自定义Symfony2细枝表单模板块

Forms 如何创建自定义Symfony2细枝表单模板块,forms,symfony,twig,Forms,Symfony,Twig,我正在做一个项目,我需要一些自定义表单模板块。不是现有块的修改版本,而是新块 我已经能够创建新的块,让Symfony/Twig重新登录并使用它们,但有一些限制 表单模板块似乎有严格的命名约定。 似乎模板名称必须正好包含一个下划线。下划线前面的单词似乎也有要求和/或限制。我已经可以开始工作了,但没有别的了。此外,如果使用_小部件结束块的名称,则不会引发异常,但如果直接在页面模板中使用块,则不会呈现任何内容。我假设_小部件块只能从表单块中使用(真?) 我的目标是使用项目的首字母缩写(wwui)来命名

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

我已经能够创建新的块,让Symfony/Twig重新登录并使用它们,但有一些限制

表单模板块似乎有严格的命名约定。 似乎模板名称必须正好包含一个下划线。下划线前面的单词似乎也有要求和/或限制。我已经可以开始工作了,但没有别的了。此外,如果使用_小部件结束块的名称,则不会引发异常,但如果直接在页面模板中使用块,则不会呈现任何内容。我假设_小部件块只能从表单块中使用(真?)

我的目标是使用项目的首字母缩写(wwui)来命名我的所有新自定义块,以便让其他开发人员(以及我自己:-)清楚地知道哪些标记特定于此项目

这就是我为达到当前目标所做的:
-按照Symfony表单自定义文档中的指定创建fields.html.twig文件
-在config.yml中的twig.form.resources中指定该表单
-使用函数声明创建细枝扩展 -在模板中使用我的新块

一个简单的例子:

// 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 %}
如果我将其重命名为form_byBlock,它就可以正常工作

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


更新日期2015年8月27日09:30
对@lxg评论的一些补充信息:

块是简单的HTML/Twig代码块,可以在子模板中重写

我认为这并不完全准确。块(至少一个表单块)是一个细枝片段,它像细枝函数一样被引用(例如,
{{form_widget(form)}}

我在这里特别询问有关表单块的问题

其中许多函数在
vendor/symfony/symfony/Bridge/Twig/Extension/FormExtension.php
中定义
其中一些(
form\u widget()
form\u errors()
form\u label()
form\u row()
form\u rest()
form\u start()
)由类
Symfony\Bridge\Twig\Node\searchanderblocknode
实现(请参见
getFunctions()
FormExtension.php
中的方法

vendor/symfony/symfony/src/symfony/Bridge/Twig/Resources/views/Form/Form\u div\u layout.html.Twig
中定义了这些文件的小片段

我要做的是创建具有项目特定名称的新表单块

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


检查
Symfony\Bridge\Twig\Node\SearchAndRenderBlockNode()
方法没有产生额外的理解。

结果表明
Symfony\Bridge\Twig\Node\SearchAndRenderBlockNode()
方法是限制的来源


还有一种方法允许我使用我想要的名称。它是
Symfony\Bridge\Twig\Node\RenderBlockNode()

我认为术语有点混乱:块只是一块HTML/Twig代码,可以在子模板中重写。可能是指宏、模板函数/过滤器,甚至是自定义标记?请详细说明你想用你的“积木”实现什么,也许有办法解决它。我已经编辑了你的问题标题。不要在其中添加[SOLVED]之类的标签,只需自己回答并接受即可。谢谢你:)一个。这在文档、教程或任何地方都没有。为了添加一个简单的表单元素,您必须编写3倍多的代码,这让我目瞪口呆。
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.