Symfony форма - запустить проверку при загрузке (предварительно проверить форму) - PullRequest
0 голосов
/ 30 января 2020

Мое приложение позволяет сохранять фрагменты контента в базе данных, пока status = draft. Форма состоит из некоторых обязательных полей (например, заголовка), а затем из множества других полей в форме, которая сохраняется в массиве JSON объекта вместе с заголовком.

У меня есть проверка ограничения на поля формы, но не хотят применять их, если status = draft. Кроме того, я хочу запустить правила проверки при загрузке формы, чтобы пользователь знал, какие поля требуются при перемещении записи в опубликованную, так как при этом отображаются ошибки формы, но вы все равно можете сохранить форму.

I ' Я частично достиг этого, в своем действии редактирования, клонируя форму и подделывая ее. Это создает ошибки формы. Затем я могу отобразить клонированную версию с ошибками, но обработать и сохранить не клонированную версию (для которой я запускаю $ form-> clearErrors (true), чтобы эффективно игнорировать проверку при черновом состоянии)

Это работает но я задавался вопросом, есть ли лучший способ. Я пытался с FormEvents, но не смог добиться проверки при загрузке.

1 Ответ

0 голосов
/ 30 января 2020

Слишком большой для комментария, так что в качестве ответа, но больше похоже на идею, превосходящую комментарий;)

Поскольку у вас есть Форма, состоящая из объектов под-формы, вы рассматривали возможность создания объекта Model для каждая форма? Таким образом, вы можете создать соответствующую группу проверки . Вы бы не сохранили объекты Model в базе данных.

Это также позволит вам предоставлять обратную связь пользователю, поскольку вы можете проверять каждую подформу отдельно для объектов модели.

Как только пользователь сохранит форму, не отметив «Черновик» (или кнопку «Отправить», или как вы ее настроили), вы поймете это. Когда пользователь делает это, вы создаете новую сущность, заполняете ее всеми данными из всех объектов модели. Затем вы создаете новый экземпляр Validator и добавляете в него все группы валидации, созданные вами ранее.

Затем вы запускаете $validator->validate($entity, null, ['validation-group-model1', 'validation-group-model2']) (что в любом случае происходит внутри) и используете вывод, чтобы предоставить пользователю результат.


Очевидно, что при редактировании существующей сущности необходимо заполнить все объекты модели данными из сущности.

...