在Symfony中修改绑定表单数据的建议位置是哪个?

Pol*_*ino 14 symfony-forms symfony

我有一个创建新的表单Customer.客户可能拥有手机号码.移动号码应该没有+00用户可以键入的前缀.这可以通过以下方式轻松完成:

$customer->setMobile(preg_replace("/^(\+|00)/", '', $customer->getMobile()));
Run Code Online (Sandbox Code Playgroud)

放置此代码的最佳位置是哪个?

  • CustomerController调用实体管理器之前并保持实体.这真的是MVC模式中的控制器问题吗?
  • 使用SanitizeCustomerSubscriber和听取FormEvents:POST_BIND事件
  • 使用CustomerSanitizer服务

还有其他想法吗?当然,我说的是一般的数据操作,手机号码只是一个例子:要消毒的字段可能不仅仅是一个.

Ber*_*sek 42

您应该在PRE_BIND事件中执行此操作,您可以在处理之前访问提交的数据.

$builder->addEventListener(FormEvents::PRE_BIND, function (FormEvent $event) {
    $data = $event->getData();
    if (isset($data['mobile'])) {
        $data['mobile'] = preg_replace("/^(\+|00)/", '', $data['mobile']);
    }
    $event->setData($data);
});
Run Code Online (Sandbox Code Playgroud)

对于记录,从Symfony 2.3开始,此事件被调用PRE_SUBMIT.


Eln*_*mov 10

我把它放到Customer setMobile()方法中 - 越接近数据本身越好.这样,无论使用何种控制器或表格来设置移动电话号码,都将对其进行消毒.