2016-10-21 2 views
2
$userData = (new User()) 
     ->setPersonCode(123) 
     ->setPhone('+470002342342342'); 

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

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

$userForm->isValid(); 

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

ответ

2

Если вы не хотите отправлять данные в форму, пропустите формы полностью; использовать 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; 
+0

Могу ли я использовать в аннотациях подтверждения 'Assert \ IsTrue'? – Wizard

+0

Если вы установили те из класса Model, которые вы подаете на функцию 'validate', они будут распознаны, да. –

0

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

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

$userForm = $this->toolbar->getForm(UserType::class); 
$userForm->sumbit($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(); будет обрабатывать данные с, который был представлен в форме на этой странице.

+0

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

+0

@Wizard где вы ожидаете, что данные придут с этого момента? Если его форма, используйте второй метод – Chausser