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