如何处理表单主题
编辑本页警告:您正在浏览的文档欧宝体育电话欧宝娱乐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_row
Symfony)。欧宝娱乐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_theme
helper(在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
模板现在用于全局定义表单输出。
PHP
控件中自动包含自定义模板应用程序/资源/视图/形式
中创建的目录所有模板,修改您的应用程序配置文件:
- YAML
- XML
- PHP
1 2 3 4 5 6 7
# app / config / config.yml框架:模板:形式:资源:-“形式”#……
中的任何片段应用程序/资源/视图/形式
目录现在被全局地用于定义表单输出。