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.
| 归档时间: |
|
| 查看次数: |
8479 次 |
| 最近记录: |