Symfony2表单事件的描述?

Pol*_*ino 26 symfony-forms symfony

这是FormEvents来自github上的Symfony2存储库的类.它与主要文章" 如何使用表单事件动态生成表单"相关联.

任何人都知道在流程中调用这些事件的确切时间?

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';
}
Run Code Online (Sandbox Code Playgroud)

xan*_*ido 66

有两种类型的事件:

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

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

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

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

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

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

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

FilterDataEvent在数据规范化后触发form.bind_norm_data.触发Symfony\Component\Form\Form::bind().请参阅Symfony\Component\Form\Extension\Core\EventListener\FixUrlProtocolListener(由UrlType示例添加)

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

我建议在Form类本身周围进行一下,以便更好地了解触发这些事件的时间,以及如何使用它们.

  • 应该注意,表单事件的这种描述仅对Symfony 2.0表单组件有效.自2.1起,以下事件已被弃用,将从2.3开始删除:`form.bind_client_data`,`form.bind_norm_data`,`form.set_data`.从2.1开始,表单事件侦听器现在接收一个`FormEvent`对象,而不是已弃用的`FilterDataEvent`和`DataEvent`对象,这些对象将在2.3中删除. (14认同)