Symfony 3+:自定义表单元素模板

Symfony 3+: Custom form element template

我们终于升级到 Symfony 3,但这会导致一些问题。

我正在尝试解决的当前问题是 https://api.symfony.com/2.8/Symfony/Component/Form/FormTypeInterface.html#method_getName 已被弃用。

FormTypeInterface#getName() 用于创建昵称 用于 twig 表单模板。

示例自定义表单类型:

class MyCustomType extends AbstractType {

    // ...

    public function getName() {
        return 'my_custom';
    }

}

Twig 中的示例模板行:

{% block my_custom_row %}

    {# ... #}

{% endblock %}

问题:

Symfony 3+ 中自定义表单类型的命名约定是什么? IE。我应该如何命名树枝块以自定义表单 row/widget/error 渲染?

Twig 方块默认命名为 FormType class 没有 Type 后缀。 IE。 my_custom_row 用于 *_row 块。

其他更自定义的方法是添加函数getBlockPrefix() (https://api.symfony.com/3.1/Symfony/Component/Form/FormTypeInterface.html#method_getBlockPrefix)。该函数应该 return 与之前的 getName() 完全相同的块名称前缀,但这是可选的,仅当块前缀不同于 class 名称时才需要。

在 Symfony4 中也可以使用表单选项 block_name 来覆盖默认值。