如何处理表单主题

编辑本页

警告:您正在浏览的文档欧宝体育电话欧宝娱乐app下载地址Symfony 3.1,现已不再维护。

本页的更新版本用于Sy欧宝娱乐app下载地址mfony 6.2(当前稳定版本)。

如何处理表单主题

表单呈现方式的每个部分都可以自定义。您可以自由地更改每个表单“行”呈现的方式,更改用于呈现错误的标记,甚至自定义一个窗体的呈现方式文本区域标签应该被呈现。没有什么是禁止的,不同的定制可以在不同的地方使用。

欧宝娱乐app下载地址Symfony使用模板来呈现表单的每个部分,例如标签标签,输入标签、错误消息和其他一切。

在Twig中,每个表单“片段”都由一个Twig块表示。要自定义表单呈现方式的任何部分,只需覆盖适当的块。

在PHP中,每个表单“片段”都是通过一个单独的模板文件呈现的。要自定义表单呈现方式的任何部分,只需通过创建一个新模板来覆盖现有模板。

要了解这是如何工作的,请自定义form_row片段,并向div元素,用于围绕每一行。要做到这一点,创建一个新的模板文件来存储新的标记:

  • 嫩枝
  • PHP
1 2 3 4 5 6 7 8 9 10
{# app /资源/视图/形式/ fields.html。树枝#}{%form_row %}{%没有余地的%}<div“form_row”>{{form_label(form)}}{{form_errors(form)}}{{form_widget(form)}}div>{%endspaceless%}{%endblockform_row %}

form_row控件呈现大多数字段时使用表单片段form_row ()函数。来告诉Form组件使用您的newform_row在上面定义的片段中,将以下内容添加到呈现表单的模板顶部:

  • 嫩枝
  • PHP
1 2 3 4 5 6 7
{# app /资源/视图/ / new.html违约。树枝#}{%form_theme表单的表单/ fields.html。嫩枝' %}{#或者如果你想使用多个主题#}{%form_theme表单的表单/ fields.html。/ fields2.html树枝的形式。嫩枝' %}{#……渲染表单#}

form_theme标签(Twig)“导入”给定模板中定义的片段,并在呈现表单时使用它们。也就是说,当form_row ()函数在此模板中稍后调用时,它将使用form_row从您的自定义主题(而不是默认form_rowSymfony)。欧宝娱乐app下载地址

您的自定义主题不必覆盖所有的块。当呈现一个在自定义主题中没有被覆盖的块时,主题引擎将退回到全局主题(在包级别定义)。

如果提供了几个自定义主题,则在返回到全局主题之前将按列出的顺序进行搜索。

要自定义表单的任何部分,只需覆盖适当的片段。确切地知道要覆盖哪个块或文件是下一节的主题。

有关更广泛的讨论,请参见如何自定义表单渲染

表单片段命名

在Sy欧宝娱乐app下载地址mfony中,所呈现的表单的每个部分——HTML表单元素、错误、标签等——都定义在基本主题中,基本主题是Twig中的块集合和PHP中的模板文件集合。

在Twig中,需要的每个块都定义在一个模板文件中(例如。form_div_layout.html.twig),住在树枝桥.在这个文件中,您可以看到呈现表单所需的每个块和每个默认字段类型。

在PHP中,片段是单独的模板文件。默认情况下,它们位于资源/视图/形式FrameworkBundle (在GitHub上查看).

每个片段名称遵循相同的基本模式,并被分为两个部分,由单个下划线字符(_).一些例子是:

  • form_row-由form_row ()渲染大部分字段;
  • textarea_widget-由form_widget ()渲染文本区域字段类型;
  • form_errors-由form_errors ()显示错误:显示字段的错误;

每个片段都遵循相同的基本模式:type_part.的类型部分对应于字段类型被渲染(例如:文本区域复选框日期,等),而部分部分对应于什么正在被渲染(例如:标签小部件错误等等)。默认情况下,有4种可能部分可呈现的形式的:

标签 (如。了form_label () 呈现字段的标签
小部件 (如。form_widget () 渲染字段的HTML表示
错误 (如。form_errors () 呈现字段的错误
(如。form_row () 渲染字段的整行(标签,小部件和错误)

请注意

实际上还有两个部分-而且休息-但你几乎不需要担心重写它们。

通过了解字段类型(例如:文本区域)和你想自定义的部分(例如:小部件),您可以构造需要重写的片段名称(例如。textarea_widget).

模板片段继承

在某些情况下,您想要自定义的片段将会出现缺失。例如,没有textarea_errors片段在Symfony提供的默认主题中。欧宝娱乐app下载地址那么如何渲染textarea字段的错误呢?

答案是:通过form_errors片段。当Symf欧宝娱乐app下载地址ony呈现textarea类型的错误时,它首先查找textarea_errors碎片才落回form_errors片段。每个字段类型都有一个的父类型文本区域文本,其父节点为形式),如果基本片欧宝娱乐app下载地址段不存在,Symfony将使用该片段作为父类型。

为了重写错误只有文本区域字段,复制form_errors片段,重命名为textarea_errors并自定义它。的默认错误呈现所有字段,复制并自定义form_errors直接片段。

提示

每个字段类型的“父”类型可在表单类型引用对于每个字段类型。

全局表单主题

在上面的示例中,使用了form_themehelper(在Twig中)来“导入”自定义表单片段只是这种形式。您还可以告诉Symfony在整个项目欧宝娱乐app下载地址中导入表单定制。

嫩枝

控件中自动包含自定义块fields.html.twig中创建的模板所有模板,修改您的应用程序配置文件:

  • YAML
  • XML
  • PHP
1 2 3 4 5
# app / config / config.yml枝:form_themes:-“形式/ fields.html.twig”#……

中的任何块fields.html.twig模板现在用于全局定义表单输出。

在Twig中,你还可以在需要定制的模板中定制表单块:

12 3 4 5 6 7 8 9 10 11 12 13 14 15
{%扩展“base.html。嫩枝' %}{#导入“_self”作为表单主题#}{%form_themeForm _self %}{#定制表单片段#}{%form_row %}{#自定义字段输出#}{%endblockform_row %}{%内容%}{#……#}{{form_row(form.task)}}{%endblock%}

{% form_theme form _self %}标记允许在将使用这些自定义的模板中直接自定义表单块。使用此方法可以快速进行表单输出定制,而这些定制只需要在单个模板中使用。

谨慎

{% form_theme form _self %}功能将只有如果您的模板扩展了另一个模板,则可以工作。如果你的模板没有,你必须指向form_theme到一个单独的模板。

PHP

控件中自动包含自定义模板应用程序/资源/视图/形式中创建的目录所有模板,修改您的应用程序配置文件:

  • YAML
  • XML
  • PHP
1 2 3 4 5 6 7
# app / config / config.yml框架:模板:形式:资源:-“形式”#……

中的任何片段应用程序/资源/视图/形式目录现在被全局地用于定义表单输出。

此工作,包括代码示例,是根据创作共用BY-SA 3.0许可证。