Как использовать функцию submit() для обработки отправки форм

Как использовать функцию submit() для обработки отправки форм

В методом handleRequest() очень легко работать с отправкой форм:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
use Symfony\Component\HttpFoundation\Request;
// ...

public function newAction(Request $request)
{
    $form = $this->createFormBuilder()
        // ...
        ->getForm();

    $form->handleRequest($request);

    if ($form->isSubmitted() && $form->isValid()) {
        // выполнить какое-либо действие...

        return $this->redirectToRoute('task_success');
    }

    return $this->render('product/new.html.twig', array(
        'form' => $form->createView(),
    ));
}

Tip

Чтобы узнать больше об этом методе, прочтите Handling Form Submissions.

Вызов Form::submit() вручную

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

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
use Symfony\Component\HttpFoundation\Request;
// ...

public function newAction(Request $request)
{
    $form = $this->createFormBuilder()
        // ...
        ->getForm();

    if ($request->isMethod('POST')) {
        $form->submit($request->request->get($form->getName()));

        if ($form->isSubmitted() && $form->isValid()) {
            // выполнить какие-либо действия...

            return $this->redirectToRoute('task_success');
        }
    }

    return $this->render('product/new.html.twig', array(
        'form' => $form->createView(),
    ));
}

Tip

Формы, состоящие из вложенных полей, ожидают в submit() массив. Вы также можете отправить индивидуальные поля, вызвав submit() напрямую в поле:

1
$form->get('firstName')->submit('Fabien');

Tip

При отправке формы через запрос "PATCH", вы можете захотеть обновить только несколько из отправленных полей. Чтобы добиться этого, вы можете передать submit() необязательный второй булев аргумент. Передача false удалит все отсутствующие поля из объекта формы. В противном случае, отсутствующие поля будут установлены, как null.

Caution

Когда второй параметр $clearMissing - false, как в методе "PATCH", расширение валидации будет работать только с отправленными полями. Если нужно валидировать основоположные данные, то это нужно сделать вручную, т.е. используя валидатор.

Эта документация является переводом официальной документации Symfony и предоставляется по свободной лицензии CC BY-SA 3.0.