Проверка поля на основе другого поля с использованием дополнительной базы данных
У меня есть простая форма, которая содержит два поля, первое поле просто выбор, а второе поле содержит значение, которое необходимо проверить с помощью первого поля.
Я нашел похожий вопрос проверки формы Symfony2 на основе двух полей и попытался использовать средство проверки обратного вызова.
Я прочитал документацию, но не могу понять, как я могу использовать ее с доступом к базе данных.
Кажется, что единственный способ - вызвать метод проверки статически, но в этом случае я теряю контекст моего контроллера. Мне это нужно для доступа, например, к базе данных.
В связи с этим я использую Silex и хочу получить доступ к предоставляемым им услугам.
Форма не привязана ни к какому классу, поэтому создание собственного ограничения выглядит неправильно для меня, потому что я не вижу способа передать другие поля в валидатор.
Есть ли способ добиться этого?
Или мне нужен другой подход?
1 ответ
Я настоятельно советую вам сопоставить форму с классом и создать пользовательское ограничение...
Я написал подробный пример о том, как:
- создать собственное ограничение проверки
- превратить это в услугу
- внедрить объект-менеджер
- получить доступ к базе данных из ограничения
TLDR:
Что вам нужно, это пользовательский валидатор на уровне класса.
Валидатор на уровне класса необходим, потому что вам нужен доступ ко всему объекту (не только к одному свойству), если вы хотите проверить несколько связанных значений...
... или нужно извлечь что-то из базы данных, используя другое свойство в качестве критерия выбора.
Другим вариантом может быть создание прослушивателя события формы и передача ему менеджера объектов перед добавлением его в форму.
Затем позаботьтесь о процессе проверки (проверка данных по базе данных + добавление ошибок в форму) внутри слушателя самостоятельно.