#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 откуда тогда вы ожидаете поступления данных? Если это форма, используйте второй метод