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

编辑该页面

警告:你浏览的文档欧宝官网下载appob娱乐下载Symfony 4.0,不再维护。

这个页面的更新版本Symfob娱乐下载ony 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和控制的顺序加载表单类型扩展(优先级越高,越早一个扩展加载)。这是有用的,当你需要保证一个扩展加载之前或之后的另一个扩展。

如何处理文件上传与教义:你有一个媒体模式与路径属性,对应数据库中的图像路径:

1 2 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传递给视图。

例如:

1 2 3 4 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娱乐下载\组件\PropertyAccess\PropertyAccess;使用ob娱乐下载\组件\OptionsResolver\OptionsResolver;使用ob娱乐下载\组件\形式\扩展\核心\类型\文件类型;ImageTypeExtension扩展AbstractTypeExtension{公共函数getExtendedType(){返回文件类型::类;}公共函数configureOptions(OptionsResolver美元解析器){/ /使它合法的文件类型字段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布洛克:

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

一定要配置这个主题模板形式这样的形式系统。

表单类型引用)。例如,几个表单类型继承TextType表单类型(如EmailType,SearchType,UrlType等)。一种类型的扩展应用TextType(即,getExtendedType ()方法返回TextType::类)将适用于所有这些形式类型。

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

这项工作,包括代码示例,许可下Creative Commons冲锋队3.0许可证。