Symfony проверяет сущность с помощью формы

#php #forms #symfony

#php #формы #symfony

Вопрос:

     $userData = (new User())
        ->setPersonCode(123)
        ->setPhone(' 470002342342342');

    $userForm = $this->toolbar->getForm(UserType::class, $userData);
  

Я создаю форму из класса entity, где задаются данные. Если сейчас я попытаюсь использовать:

 $userForm->isValid();
  

Я получаю true , поскольку данные формы не отправлены, как я могу выполнить проверку, не устанавливая вручную данные для формы и отправки?

Ответ №1:

Если вы не хотите отправлять данные в форму, полностью пропустите формы; используйте службу Validator напрямую:

 <?php

// (Assuming you're in a controller, otherwise inject the validator some other way.)

$userData = (new User())
    ->setPersonCode(123)
    ->setPhone(' 470002342342342');

$validator = $this->get('validator');
$errors    = $validator->validate($userData);
$isValid   = count($errors) === 0;
  

Комментарии:

1. могу ли я использовать в аннотациях validator AssertIsTrue ?

2. Если вы установили их в классе модели, который вы передаете validate функции, они будут распознаны, да.

Ответ №2:

Ваш вопрос сформулирован немного странно, и я не уверен, что именно вы хотите, если вы хотите вручную установить данные, как указано выше, тогда вызовите $form-> submit(), передающий пользовательские данные.

 $userData = (new User())
    ->setPersonCode(123)
    ->setPhone(' 470002342342342');

$userForm = $this->toolbar->getForm(UserType::class);
$userForm->submit($userData);
if(!$userForm->isValid()){
    // handle errors
}
  

Если вы хотите, чтобы пользователь отправлял данные в форме, сделайте что-то вроде этого:

 public function createUserAction(Request $request)
{
    $userForm = $this->toolbar->getForm(UserType::class);
    $userForm->handleRequest();
    if(!$userForm->isValid()){
        // handle errors
    }
}
  

$userForm->handleRequest(); обработает получение данных, которые были отправлены из формы на странице.

Комментарии:

1. Как я могу вызвать $form->sumbit() ? У меня нет массива данных.

2. @Wizard откуда тогда вы ожидаете поступления данных? Если это форма, используйте второй метод