Symfony2 表单事件的描述?

Posted

技术标签:

【中文标题】Symfony2 表单事件的描述?【英文标题】:Description of Symfony2 form events? 【发布时间】:2012-03-27 21:49:52 【问题描述】:

这是来自 github 上 Symfony2 存储库的 FormEvents 类。它链接自主要文章How to Dynamically Generate Forms Using Form Events。

有人知道这些事件在流程中的确切调用时间吗?

namespace Symfony\Component\Form;

/**
 * @author Bernhard Schussek <bernhard.schussek@symfony.com>
 */
final class FormEvents

    const PRE_BIND = 'form.pre_bind';
    const POST_BIND = 'form.post_bind';
    const PRE_SET_DATA = 'form.pre_set_data';
    const POST_SET_DATA = 'form.post_set_data';
    const BIND_CLIENT_DATA = 'form.bind_client_data';
    const BIND_NORM_DATA = 'form.bind_norm_data';
    const SET_DATA = 'form.set_data';

【问题讨论】:

【参考方案1】:

有两种类型的事件:

DataEvent - 对表单数据的只读访问。 'Pre' 和 'Post' 事件是只读的。

FilterDataEvent - 允许修改表单数据的事件。

form.pre_bind DataEvent 在数据绑定到表单之前触发。由Symfony\Component\Form\Form::bind()触发

form.post_bind DataEvent 数据绑定到表单后触发。由Symfony\Component\Form\Form::bind()触发

form.pre_set_data DataEvent 在字段填充默认数据之前触发。由Symfony\Component\Form\Form::setData()触发

form.post_set_data DataEvent 在字段填充默认数据后触发。由Symfony\Component\Form\Form::setData()触发

form.bind_client_data FilterDataEvent 在数据绑定到表单之前触发。由Symfony\Component\Form\Form::bind()触发

form.bind_norm_data FilterDataEvent 数据标准化后触发。由Symfony\Component\Form\Form::bind() 触发。见Symfony\Component\Form\Extension\Core\EventListener\FixUrlProtocolListener(以UrlType添加为例)

form.set_data FilterDataEvent 在绑定默认数据时触发。由Symfony\Component\Form\Form::setData()触发

我建议探索一下 Form 类本身,以便更好地了解这些事件何时被触发,以及如何使用它们。

【讨论】:

非常感谢,已采纳!同时我在表单事件方面遇到了一些问题,如果你有空闲时间,也许你可以给我一点帮助:***.com/questions/9661026/… 需要注意的是,这个表单事件的描述只对 Symfony 2.0 表单组件有效。自 2.1 起,以下事件已被弃用,自 2.3 起将被删除:form.bind_client_dataform.bind_norm_dataform.set_data。从 2.1 开始,表单事件侦听器现在接收 FormEvent 对象,而不是已弃用的 FilterDataEventDataEvent 对象,这些对象将在 2.3 中删除。 嘿@xanido,你的链接坏了。 链接已更新以指向 2.0 源(如前所述,这是此答案真正适用的唯一版本)。谢谢@帕特

以上是关于Symfony2 表单事件的描述?的主要内容,如果未能解决你的问题,请参考以下文章

Symfony2 防止多个表单提交

Symfony2 独立表单组件 v2.3 - 设置表单

Symfony2 表单用数据预填充字段

Symfony2 嵌入式表单删除按钮功能

symfony2 表单验证单选按钮

Symfony2:创建表单时如何设置表单域的值