提问者:小点点

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


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

我已经能够创建新的块,并让Symfony/Twig重新定义和使用它们,但有局限性。

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

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

以下是我为达到当前目标所做的工作:
-创建一个字段。html。Symfony表单自定义文档中指定的细枝文件
-在细枝中指定该表单。类型配置中的资源。yml
-创建带有函数声明的细枝扩展-在我的模板中使用我的新块

一个简单的例子:

// 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 ) }})。

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

其中许多函数在供应商/symfony/symfony/Bridge/Twig/Extension/FormExtension中定义。php
以及其中一些(表单小部件()表单错误()表单标签()表单行()表单rest()表单开始(),和form\u end())由类Symfony\Bridge\Twig\Node\searchanderblocknode实现(请参见FormExtension中的getFunctions()方法)。php)。

vendor/symfony/symfony/src/symfony/Bridge/Twig/Resources/views/Form/Form\u div\u layout中定义了它们的细枝片段。html。细枝

我想做的是用项目特定的名称创建新的表单块。

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

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


共1个答案

匿名用户

事实证明,Symfony\Bridge\Twig\Node\SearchAndRenderBlockNode()方法是限制的来源。

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