形成事件
编辑该页面警告:你浏览的文档欧宝官网下载appob娱乐下载Symfony 2.3,不再维护。
读这个页面的更新版本Symfob娱乐下载ony 6.2(当前的稳定版本)。
形成事件
表单组件提供一个结构化的过程让你定制你的形式,利用的EventDispatcher组件。使用表单事件,您可以修改信息或字段在不同工作流的步骤:从人口的表单提交的数据请求。
注册一个事件监听器很容易使用表单组件。
例如,如果您想注册一个函数FormEvents: PRE_SUBMIT
事件,下面的代码允许您添加一个字段,根据请求的值:
1 2 3 4 5 6 7 8 9 10 11 12 13 14
/ /……使用ob娱乐下载\组件\形式\FormEvent;使用ob娱乐下载\组件\形式\FormEvents;美元侦听器=函数(FormEvent美元事件){/ /……};美元形式=美元formFactory- >createBuilder ()/ /添加表单字段- >addEventListener (FormEvents::PRE_SUBMIT,美元侦听器);/ /……
形式的工作流
1)预先填充表单(FormEvents: PRE_SET_DATA
和FormEvents: POST_SET_DATA
)
两个事件期间派遣预填充的形式,当形式::setData ()被称为:FormEvents: PRE_SET_DATA
和FormEvents: POST_SET_DATA
。
一个)FormEvents: PRE_SET_DATA
事件
的FormEvents: PRE_SET_DATA
事件分派的开始形式::setData ()
方法。它可以用来:
- 修改数据在预填充;
- 修改表单根据预填充数据(动态添加或删除字段)。
数据类型 | 价值 |
---|---|
模型数据 | 零 |
规范化数据 | 零 |
视图数据 | 零 |
另请参阅
看到所有表单事件乍一看表单事件信息表。
谨慎
在FormEvents: PRE_SET_DATA
,形式::setData ()如果使用锁,将抛出一个异常。如果你想修改数据,您应该使用FormEvent: setData ()代替。
FormEvents: PRE_SET_DATA
在表单组件
的集合
类型依赖于形式ob娱乐下载
订阅者,听FormEvents: PRE_SET_DATA
事件为了重新排序表单的字段根据预填充的数据对象,通过删除和添加所有形式的行。
B)FormEvents: POST_SET_DATA
事件
的FormEvents: POST_SET_DATA
活动结束的时候形式::setData ()方法。这个事件在这里主要是读取数据后预填充表单。
数据类型 | 价值 |
---|---|
模型数据 | 模型数据注入setData () |
规范化数据 | 使用模型变压器模型数据转换 |
视图数据 | 规范化数据转换变压器使用视图 |
另请参阅
看到所有表单事件乍一看表单事件信息表。
FormEvents: POST_SET_DATA
在表单组件
的ob娱乐下载
类是订阅了听FormEvents: POST_SET_DATA
事件为了收集信息的形式规范化的模型和视图数据。
2)提交表单(FormEvents: PRE_SUBMIT
,FormEvents:提交
和FormEvents: POST_SUBMIT
)
三个事件时派遣形式:handleRequest ()或形式::提交()被称为:FormEvents: PRE_SUBMIT
,FormEvents:提交
,FormEvents: POST_SUBMIT
。
一个)FormEvents: PRE_SUBMIT
事件
的FormEvents: PRE_SUBMIT
事件分派的开始形式::提交()方法。
它可以用来:
- 改变的数据请求,提交表单的数据;
- 添加或删除表单字段,之前提交的数据形式。
数据类型 | 价值 |
---|---|
模型数据 | 一样的FormEvents: POST_SET_DATA |
规范化数据 | 一样的FormEvents: POST_SET_DATA |
视图数据 | 一样的FormEvents: POST_SET_DATA |
另请参阅
看到所有表单事件乍一看表单事件信息表。
FormEvents: PRE_SUBMIT
在表单组件
的ob娱乐下载
订阅者订阅FormEvents: PRE_SUBMIT
事件以减少请求的数据(字符串值)。的ob娱乐下载
订阅者订阅FormEvents: PRE_SUBMIT
事件为了验证CSRF令牌。
B)FormEvents:提交
事件
的FormEvents:提交
事件分派之前形式::提交()方法转换的规范化数据模型和视图数据。
它可以用来改变数据的归一化的数据表示。
数据类型 | 价值 |
---|---|
模型数据 | 一样的FormEvents: POST_SET_DATA |
规范化数据 | 数据请求从请求使用视图reverse-transformed变压器 |
视图数据 | 一样的FormEvents: POST_SET_DATA |
另请参阅
看到所有表单事件乍一看表单事件信息表。
谨慎
此时,您不能添加或删除字段的形式。
FormEvents:提交
在表单组件
的ob娱乐下载
订阅的FormEvents:提交
事件以预先考虑违约协议URL字段,提交协议。
C)FormEvents: POST_SUBMIT
事件
的FormEvents: POST_SUBMIT
事件分发经形式::提交()一旦模型和视图数据规范化。
它可以用来获取数据后反规范化。
数据类型 | 价值 |
---|---|
模型数据 | 规范化数据reverse-transformed使用变压器模型 |
规范化数据 | 一样的FormEvents:提交 |
视图数据 | 规范化数据转换变压器使用视图 |
另请参阅
看到所有表单事件乍一看表单事件信息表。
谨慎
此时,您不能添加或删除字段的形式。
FormEvents: POST_SUBMIT
在表单组件
的ob娱乐下载
订阅的FormEvents: POST_SUBMIT
事件以收集的信息形式。的ob娱乐下载
订阅的FormEvents: POST_SUBMIT
事件以规范化的对象自动验证和更新以及规范化表示视图表示。
注册事件侦听器或事件订阅者
为了能够使用表单事件,您需要创建一个事件侦听器或一个事件订阅者并注册一个事件。
每个的名字“形式”事件上被定义为一个常数FormEvents类。此外,每个事件回调(侦听器或订阅者的方法)传递一个参数,这是一个实例FormEvent。事件对象包含一个引用的当前状态和当前正在处理的数据形式。
的名字 | FormEvents 常数 |
事件的数据 |
---|---|---|
form.pre_set_data |
FormEvents: PRE_SET_DATA |
模型数据 |
form.post_set_data |
FormEvents: POST_SET_DATA |
模型数据 |
form.pre_bind |
FormEvents: PRE_SUBMIT |
请求数据 |
form.bind |
FormEvents:提交 |
规范化数据 |
form.post_bind |
FormEvents: POST_SUBMIT |
视图数据 |
2.3
在Symfonob娱乐下载y 2.3之前,FormEvents: PRE_SUBMIT
,FormEvents:提交
和FormEvents: POST_SUBMIT
被称为FormEvents: PRE_BIND
,FormEvents:绑定
和FormEvents: POST_BIND
。
谨慎
的FormEvents: PRE_BIND
,FormEvents:绑定
和FormEvents: POST_BIND
常量在Symfony的3.0版本将被删除。ob娱乐下载事件名称还是原来的值,所以确保你使用FormEvents
代码中的常量向前兼容性。
事件监听器
一个事件侦听器可以是任何类型的有效的可调用的。
创建和绑定一个事件侦听器的形式非常简单:
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
/ /……使用ob娱乐下载\组件\形式\FormEvent;使用ob娱乐下载\组件\形式\FormEvents;美元形式=美元formFactory- >createBuilder ()- >add (“用户名”,“文本”)- >add (“show_email”,“复选框”)- >addEventListener (FormEvents::PRE_SUBMIT,函数(FormEvent美元事件){美元用户=美元事件- >getData ();美元形式=美元事件- >getForm ();如果(!美元用户){返回;}/ /检查用户是否选择了他的电子邮件或不显示。/ /如果数据提交之前,额外的值/ /包含在请求变量需要被删除。如果(真正的= = =美元用户(“show_email”){美元形式- >add (“电子邮件”,“电子邮件”);}其他的{设置(美元用户(“电子邮件”]);美元事件- >setData (美元用户);}})- >getForm ();/ /……
当您已经创建了一个表单类型类,您可以使用其作为更好的可读性的回调方法之一:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
/ /……类SubscriptionType扩展AbstractType{公共函数buildForm(FormBuilderInterface美元构建器数组,美元选项){美元构建器- >add (“用户名”,“文本”);美元构建器- >add (“show_email”,“复选框”);美元构建器- >addEventListener (FormEvents::PRE_SET_DATA,数组(美元这,“onPreSetData”));}公共函数onPreSetData(FormEvent美元事件){/ /……}}
事件订阅者
事件的用户有不同的使用:
- 改善可读性;
- 听多个事件;
- 重组多个侦听器在一个类中。
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 42 43 44 45 46
使用ob娱乐下载\组件\EventDispatcher\EventSubscriberInterface;使用ob娱乐下载\组件\形式\FormEvent;使用ob娱乐下载\组件\形式\FormEvents;类AddEmailFieldListener实现了EventSubscriberInterface{公共静态函数getSubscribedEvents(){返回数组(FormEvents::PRE_SET_DATA = >“onPreSetData”,FormEvents::PRE_SUBMIT = >“onPreSubmit”,);}公共函数onPreSetData(FormEvent美元事件){美元用户=美元事件- >getData ();美元形式=美元事件- >getForm ();/ /检查用户是否选择了从最初的数据/ /显示他的电子邮件。如果(真正的= = =美元用户- >isShowEmail ()) {美元形式- >add (“电子邮件”,“电子邮件”);}}公共函数onPreSubmit(FormEvent美元事件){美元用户=美元事件- >getData ();美元形式=美元事件- >getForm ();如果(!美元用户){返回;}/ /检查用户是否选择了他的电子邮件或不显示。/ /如果数据提交之前,额外的价值/ /请求中包含的变量需要被删除。如果(真正的= = =美元用户(“show_email”){美元形式- >add (“电子邮件”,“电子邮件”);}其他的{设置(美元用户(“电子邮件”]);美元事件- >setData (美元用户);}}}
注册事件订阅者使用addEventSubscriber()方法:
1 2 3 4 5 6 7 8 9
/ /……美元形式=美元formFactory- >createBuilder ()- >add (“用户名”,“文本”)- >add (“show_email”,“复选框”)- >addEventSubscriber (新AddEmailFieldListener ())- >getForm ();/ /……