Здравствуйте!
Форма регистрации рендерится реактом и отправляется
AJAXзапросом, но после как я делаю
$form->submit(...), то
$form->getErrors() не возвращается никаких ошибок, хотя
$form->isValid() === false. Если рендерить форму
$form->createView(); то все работает.
Вопросы:
1. Как можно провалидировать форму не создавая своего валидатора при ajax запросе, форма ренедерится реактом, а не
$form->createView();
2. Как можно сгенерировать
Symfony\Component\HttpFoundation\Request чтобы прокинуть его в
$form->handleRequest($request); на основе данных которые приходят с
AJAX-запросом, грубо говоря чтобы
$request был такой же как при обычной отправки формы, когда форма рендерится сервером
$form->createView().
Entity:
use Symfony\Component\Validator\Constraints as Assert;
class RegisterData
{
/**
* @var string
* @Assert\NotBlank()
* @Assert\Email()
*/
public $email;
/**
* @var string
* @Assert\NotBlank()
* @Assert\Length(min=6)
*/
public $password;
}
Форма:
use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\Extension\Core\Type;
use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Component\OptionsResolver\OptionsResolver;
class RegisterDataForm extends AbstractType
{
public function buildForm(FormBuilderInterface $builder, array $options): void
{
$builder
->add('email', Type\EmailType::class)
->add('password', Type\PasswordType::class)
;
}
public function configureOptions(OptionsResolver $resolver): void
{
$resolver->setDefaults([
'data_class' => RegisterData::class,
]);
}
}
Контроллер:
public function request(Request $request, SignUp\Request\Handler $handler, Validator $validator): Response
{
$data = new RegisterData();
$form = $this->createForm(RegisterDataForm::class, $data, ['csrf_protection' => false]);
if($request->isXmlHttpRequest()) {
// $request->request->set($form->getName(), $request->request->all());
// $form->handleRequest($request); // так тоже не работает
$form->submit($request->request->all());
// $form->isValid() === false
// $form->getErrors() - пустой
...
}
}
p.s. данные отправляются заведомо невалидными, с валидными все равботает.