如何创建一个表单类型扩展

编辑本页

警告:您正在浏览的文档欧宝官网下载appob娱乐下载Symfony 4.1,现已不再维护。

本页的更新版本用于Syob娱乐下载mfony 6.2(当前稳定版本)。

form.type_extension标签:

  • YAML
  • XML
  • PHP
1 2 3 4 5 6 7
#配置/ services.yaml服务:#……应用\ \扩展\ ImageTypeExtension形式:标签:-名称:form.type_extension,extended_type:ob娱乐下载Symfony \组件\ \ \核心类型\ \文件类型扩展形式

extended_type类返回的类必须匹配getExtendedType ()方法。作为很快当你这样做的时候,任何你已经覆盖的方法(例如。buildForm ())将在任何时候被调用任何指定类型的字段(文件类型)。接下来让我们看一个例子。

提示

有一个可选的标记属性称为优先级,默认为0并控制加载表单类型扩展的顺序(优先级越高,加载扩展越早)。当您需要保证一个扩展在另一个扩展之前或之后加载时,这很有用。

如何处理文件上传与原则:你有一个带有path属性的Media模型,对应于数据库中的图像路径:

12 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
/ / src /实体/ Media.php名称空间应用程序实体使用ob娱乐下载组件验证器约束作为断言媒体/ /……/ * * *@var路径-通常存储在数据库*/私人路径/ /……公共函数getWebPath()/ /……$webPath是完整的图像URL,用于模板返回webPath;}}

的表单类型扩展类需要做两件事文件类型::类表单类型:

  1. 覆盖configureOptions ()方法,以便任何文件类型场可以有一个image_property选择;
  2. 覆盖buildView ()方法将图像URL传递给视图。

例如:

12 34 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41
/ / src /形式/扩展/ ImageTypeExtension.php名称空间应用程序形式扩展使用ob娱乐下载组件形式AbstractTypeExtension使用ob娱乐下载组件形式FormView使用ob娱乐下载组件形式FormInterface使用ob娱乐下载组件PropertyAccessPropertyAccess使用ob娱乐下载组件OptionsResolverOptionsResolver使用ob娱乐下载组件形式扩展核心类型文件类型ImageTypeExtension扩展AbstractTypeExtension公共函数getExtendedType()返回文件类型::类;}公共函数configureOptions(OptionsResolver解析器//使FileType字段具有image_property选项合法解析器->setDefined ([“image_property”]);}公共函数buildView(FormView视图, FormInterface形式数组,选项如果收取选项“image_property”))) {//这将是任何类/实体绑定到你的表单(例如媒体)parentData形式->getParent ()->getData ();imageUrl如果= = !parentData) {访问器= PropertyAccess::createPropertyAccessor ();imageUrl访问器->getValue (parentData选项“image_property”]);}//设置一个“image_url”变量,在呈现此字段时可用视图->var (“image_url”] =imageUrl;}}}

表单片段命名规则。

在扩展类中,您添加了一个新变量(image_url),但您仍然需要在模板中利用这个新变量。具体来说,您需要重写file_widget布洛克:

12 3 4 5 6 7 8 9 10 11 12 13
{/形式/ fields.html #模板。树枝#}{%扩展“form_div_layout.html。嫩枝' %}{%file_widget %}{%没有余地的%}{{(“form_widget”)}}{%如果Image_url不是null %}<imgsrc{{asset(image_url)}}/>{%endif%}{%endspaceless%}{%endblock%}

一定要配置此表单主题模板这样形式系统才能看到它。

表格类型参考).类型继承的一些表单类型TextType表单类型(如EmailTypeSearchTypeUrlType等)。应用于的表单类型扩展TextType(即,getExtendedType ()方法返回TextType::类)将适用于所有这些表单类型。

以同样的方式,自从大多数类型继承自ob娱乐下载FormType表单类型,一种应用于表单类型的扩展FormType将适用于所有这些(值得注意的例外是ButtonType表单类型)。还请记住,如果您创建(或正在使用)一个自定义表单类型,这是有可能的扩展FormType,因此您的表单类型扩展可能不会应用到它。

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