Каково рекомендуемое место для изменения данных привязанной формы в Symfony?
У меня есть форма для создания нового Customer
. У клиента может быть номер мобильного телефона. Мобильный номер должен сохраняться без префикса +
или 00
, который пользователь может ввести. Это можно легко выполнить с помощью:
$customer->setMobile(preg_replace("/^(\+|00)/", '', $customer->getMobile()));
Какое место лучше всего разместить в этом коде?
- Внутри
CustomerController
перед менеджером сущности вызова и сохраняйте объект. Это действительно вопрос контроллера в шаблоне MVC?
- Использование
SanitizeCustomerSubscriber
и прослушивания события FormEvents:POST_BIND
- Использование службы
CustomerSanitizer
Любая другая идея? Конечно, я говорю о манипуляции с данными в целом, номер мобильного телефона - это всего лишь пример: поля, подлежащие дезинфекции, могут быть более чем одним.
Ответы
Ответ 1
Вы должны сделать это в событии 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);
});
Для записи, как и для Symfony 2.3, это событие называется PRE_SUBMIT
.
Ответ 2
Я бы поставил это в метод Customer
setMobile()
- чем ближе к данным, тем лучше. Таким образом, мобильный номер будет дезинфицирован независимо от того, какие контроллеры или формы используются для его настройки.