Задача: есть форма, одно из полей которой является обязательным (в данном примере, поле login не должно быть пустым). Необходимо по состоянию чекбокса произвольной родительской формы изменить набор правил для проверки данной сущности.
Обращаю внимание, заранее прописываем 2 группы валидаторов
Дальше - первое, что пришло в голову, добавить сеттер в Symfony\Component\Form, ибо по умолчанию он отсутствует. Установка валидаторов происходит в момент создания формы, а нам необходимо, чтобы многовложенная форма сгенерилась и отдала одно из уже забинденых значений. В нашем случае - чекбокс 'user_save'.
Итак, добавляем сеттер:
Дальше, создаем свой Event Subscriber - я так думаю, его нужно нацелить на момент до байнда формы и настройки внутренних данных. Событие FormEvents::PRE_BIND.
Ну а теперь - самое простое: привязка подписчика к менеджеру событий:
Пока что все работает, как хотелось. Ищу более красивые варианты.
UPD. есть вариант без нарушения инкапсуляции, но с повторной инициализацией формы. Подробнее
тут в комментариях.
Четверг, 07 Июля, 2011
Основная проблема борьбы со спамом заключается в том, что пользователи стали настолько тупыми, что их сложно отличить от спама.
reply ·
retweet ·
favorite
Из ЖЖ: новый антипаттерн "Паблик Морозов". Класс-потомок выдает по запросу все данные класса-предка, независимо от степени их сокрытия.
reply ·
retweet ·
favorite
Сегодня машина не только не роскошь, но еще и не средство передвижения
reply ·
retweet ·
favorite
одержавшая победу партия власти нуждается в вооружённой защите от только что поддержавшего её народа.
reply ·
retweet ·
favorite
Программисты - очень душевные люди. По вечерам они садятся в кресло, наливают себе чаю и смотрят, как горят сроки сдачи проектов...
reply ·
retweet ·
favorite
В такую погоду хорошо сидеть в кресле у камина, неторопливо потягивая кота за яйца
reply ·
retweet ·
favorite
Очередная инъекция в экономику на поверку оказалась все той же клизмой
reply ·
retweet ·
favorite
Если ласточки летают хвостами вперед - на улице сильный ветер
reply ·
retweet ·
favorite