Проверка поля на основе другого поля с использованием дополнительной базы данных

У меня есть простая форма, которая содержит два поля, первое поле просто выбор, а второе поле содержит значение, которое необходимо проверить с помощью первого поля.

Я нашел похожий вопрос проверки формы Symfony2 на основе двух полей и попытался использовать средство проверки обратного вызова.
Я прочитал документацию, но не могу понять, как я могу использовать ее с доступом к базе данных.

Кажется, что единственный способ - вызвать метод проверки статически, но в этом случае я теряю контекст моего контроллера. Мне это нужно для доступа, например, к базе данных.
В связи с этим я использую Silex и хочу получить доступ к предоставляемым им услугам.

Форма не привязана ни к какому классу, поэтому создание собственного ограничения выглядит неправильно для меня, потому что я не вижу способа передать другие поля в валидатор.

Есть ли способ добиться этого?

Или мне нужен другой подход?

1 ответ

Решение

Я настоятельно советую вам сопоставить форму с классом и создать пользовательское ограничение...

Я написал подробный пример о том, как:

  • создать собственное ограничение проверки
  • превратить это в услугу
  • внедрить объект-менеджер
  • получить доступ к базе данных из ограничения

TLDR:

Что вам нужно, это пользовательский валидатор на уровне класса.

Валидатор на уровне класса необходим, потому что вам нужен доступ ко всему объекту (не только к одному свойству), если вы хотите проверить несколько связанных значений...

... или нужно извлечь что-то из базы данных, используя другое свойство в качестве критерия выбора.

Вот полный ответ с примером.


Другим вариантом может быть создание прослушивателя события формы и передача ему менеджера объектов перед добавлением его в форму.

Затем позаботьтесь о процессе проверки (проверка данных по базе данных + добавление ошибок в форму) внутри слушателя самостоятельно.

Другие вопросы по тегам