Как сопоставить данные формы в Symfony с объектом только тогда, когда форма действительна? ⇐ Php
Как сопоставить данные формы в Symfony с объектом только тогда, когда форма действительна?
Представьте пример формы в Symfony:
публичная функция buildForm(FormBuilderInterface $builder) { $строитель ->add('email', EmailType::class, [ 'ограничения' => новый NotBlank(), новый IsUnique(), ], ]) ->add('пароль', PasswordType::class, [ 'ограничения' => новый NotBlank(), новый IsStrongEnough(), ], ]) } Теперь, когда я отправлю форму и удостоверюсь, что она действительна, я хочу, чтобы $form->getData() возвращал мой DTO под названием CreateAccountCommand: последний класс CreateAccountCommand { личный $email; личный $пароль; публичная функция __construct (строка $email, строка $пароль) { $this->email = $email; $this->пароль = $пароль; } общедоступная функция getEmail(): строка { вернуть $this->email; } общедоступная функция getPassword(): строка { вернуть $this->пароль; } } Пример контроллера:
$form = $this->formFactory->create(CreateAccountForm::class); $form->handleRequest($request); if ($form->isSubmited() && $form->isValid()) { $this->commandBus->dispatch($form->getData()); вернуть новый JsonResponse([]); } Я не могу использовать этот класс напрямую с помощью data_class, поскольку форма, очевидно, ожидает, что модель будет иметь методы установки, допускающие нулевые значения. Сама форма работает отлично, как и проверка.
Я пытался использовать метод Data Mapper, но перед проверкой вызывается метод mapFormsToData.
Возможно ли это вообще? Или я должен получить данные в виде массива и создать объект вне формы?
Представьте пример формы в Symfony:
публичная функция buildForm(FormBuilderInterface $builder) { $строитель ->add('email', EmailType::class, [ 'ограничения' => новый NotBlank(), новый IsUnique(), ], ]) ->add('пароль', PasswordType::class, [ 'ограничения' => новый NotBlank(), новый IsStrongEnough(), ], ]) } Теперь, когда я отправлю форму и удостоверюсь, что она действительна, я хочу, чтобы $form->getData() возвращал мой DTO под названием CreateAccountCommand: последний класс CreateAccountCommand { личный $email; личный $пароль; публичная функция __construct (строка $email, строка $пароль) { $this->email = $email; $this->пароль = $пароль; } общедоступная функция getEmail(): строка { вернуть $this->email; } общедоступная функция getPassword(): строка { вернуть $this->пароль; } } Пример контроллера:
$form = $this->formFactory->create(CreateAccountForm::class); $form->handleRequest($request); if ($form->isSubmited() && $form->isValid()) { $this->commandBus->dispatch($form->getData()); вернуть новый JsonResponse([]); } Я не могу использовать этот класс напрямую с помощью data_class, поскольку форма, очевидно, ожидает, что модель будет иметь методы установки, допускающие нулевые значения. Сама форма работает отлично, как и проверка.
Я пытался использовать метод Data Mapper, но перед проверкой вызывается метод mapFormsToData.
Возможно ли это вообще? Или я должен получить данные в виде массива и создать объект вне формы?
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение