2015-06-22 7 views
1

Использование Symfony, версия 2.3 и более поздняя версия, я хочу, чтобы пользователь щелкнул ссылку, чтобы перейти на страницу издания уже существующего объекта и что форма, которая будет отображаться, уже проверена, с каждой ошибкой, связанной с ее соответствующим полем, т. е. я хочу, чтобы форма, подлежащая проверке перед отправкой формы, .Проверка формы перед отправкой

Я последовал this entry of the cookbook:

$form = $this->container->get('form.factory')->create(new MyEntityFormType, $myEntity, array('validation_groups' => 'my_validation_group')); 
$form->submit($request->request->get($form->getName())); 
if ($form->isValid()) { 
    ... 
} 

Но форма не заполняется DATAS сущностей: все поля пусты. Я пытался заменить $request->request->get($form->getName()) с $myEntity, но это вызвало исключение:

$ MyEntity не может быть использован в качестве массива в Symfony/Компонентный/Форма/Extension/CSRF/EventListener/CsrfValidationListener.php

Кто-нибудь знает метод для подачи метода отправки с правильно отформатированными данными, чтобы я мог достичь своей цели? Примечание. Я не хочу, чтобы Javascript был задействован.

+2

Почему форма должна быть проверена перед отправкой? – DonCallisto

+0

Это так, как я хочу. Пользователь отправляет форму создания, затем, если он отправится в редакцию, я хочу, чтобы он увидел все ошибки перед отправкой формы издания. – koudougou

+0

Ошибка, указанная перед отправкой (что предотвращает передачу), обрабатывается с помощью html5 или javascript. если вы хотите избежать javascript, вы можете использовать ограничения html5. глядя на свой код, не могли бы вы показать нам, что такое 'my_validation_group'? – DonCallisto

ответ

2

На месте:

$form->submit($request->request->get($form->getName())); 

Try:

$form->submit(array(), false); 
+0

Этот трюк выполнил эту работу: все поля заполнены данными сущности, а проверка прошла до отправки. Спасибо. – koudougou

1

Вы должны связать запрос на форму для того, чтобы заполнить форму с отправленными значениями, используя: $form->bind($request);

Подробнее о том, как выглядит ваш код:

//Create the form (you can directly use the method createForm() in your controller, it's a shortcut to $this->get('form.factory')->create()) 
$form = $this->createForm(new MyEntityFormType, $myEntity, array('validation_groups' => 'my_validation_group')); 

// Perform validation if post has been submitted (i.e. detection of HTTP POST method) 
if($request->isMethod('POST')){ 

    // Bind the request to the form 
    $form->bind($request); 

    // Check if form is valid 
    if($form->isValid()){ 

     // ... do your magic ... 

    } 

} 

// Generate your page with the form inside 
return $this->render('YourBundle:yourview.html.twig', array('form' => $form->createView())); 
+0

Проблема все еще здесь: поля не заполняются данными сущности: все поля пустые. Я даже не знаю, почему. – koudougou

Смежные вопросы