РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
411 of 1361 menu

Функция form_rest

Функция form_rest принимает переменную формы и возвращает HTML всех полей, которые ещё не были отрендерены через form_widget или другие функции вывода. Обычно используются для скрытых полей, таких как _token. Функция вызывается перед закрывающим тегом </form>.

Синтаксис

{{ form_rest(form) }}

Пример

Давайте создадим форму и выведем её поля через form_widget, а оставшиеся скрытые поля через form_rest:

<?php namespace App\Controller; use Symfony\Bundle\FrameworkBundle\Controller\AbstractController; use Symfony\Component\HttpFoundation\Response; use Symfony\Component\Form\Extension\Core\Type\TextType; use Symfony\Component\Form\Extension\Core\Type\SubmitType; class ArticleController extends AbstractController { public function index(): Response { $form = $this->createFormBuilder() ->add('name', TextType::class) ->add('save', SubmitType::class) ->getForm(); return $this->render('article/index.html.twig', [ 'form' => $form->createView(), ]); } } ?>

Теперь выведем форму в шаблоне и добавим form_rest:

{{ form_start(form) }} {{ form_widget(form.name) }} {{ form_widget(form.save) }} {{ form_rest(form) }} {{ form_end(form) }}

Результат выполнения кода:

<form name="" method="post"> <div><label for="form_name">Name</label><input type="text" id="form_name" name="form[name]"></div> <div><button type="submit" id="form_save" name="form[save]">Save</button></div> <input type="hidden" id="form__token" name="form[_token]" value="abcde"> </form>

Пример

Давайте убедимся, что без form_rest скрытый токен не попадёт в HTML. Уберём вызов функции:

{{ form_start(form) }} {{ form_widget(form.name) }} {{ form_widget(form.save) }} {{ form_end(form) }}

Результат выполнения кода:

<form name="" method="post"> <div><label for="form_name">Name</label><input type="text" id="form_name" name="form[name]"></div> <div><button type="submit" id="form_save" name="form[save]">Save</button></div> </form>

Обратите внимание: скрытое поле _token исчезло. При отправке такой формы Symfony выдаст ошибку о недействительном CSRF-токене.

Пример

Давайте добавим в форму поле text типа TextareaType и выведем только его, а остальные поля отдадим form_rest:

<?php namespace App\Controller; use Symfony\Bundle\FrameworkBundle\Controller\AbstractController; use Symfony\Component\HttpFoundation\Response; use Symfony\Component\Form\Extension\Core\Type\TextType; use Symfony\Component\Form\Extension\Core\Type\TextareaType; use Symfony\Component\Form\Extension\Core\Type\SubmitType; class ArticleController extends AbstractController { public function index(): Response { $form = $this->createFormBuilder() ->add('name', TextType::class) ->add('text', TextareaType::class) ->add('save', SubmitType::class) ->getForm(); return $this->render('article/index.html.twig', [ 'form' => $form->createView(), ]); } } ?>

Выведем в шаблоне только поле name, а text и save оставим для form_rest:

{{ form_start(form) }} {{ form_widget(form.name) }} {{ form_rest(form) }} {{ form_end(form) }}

Результат выполнения кода:

<form name="" method="post"> <div><label for="form_name">Name</label><input type="text" id="form_name" name="form[name]"></div> <div><label for="form_text">Text</label><textarea id="form_text" name="form[text]"></textarea></div> <div><button type="submit" id="form_save" name="form[save]">Save</button></div> <input type="hidden" id="form__token" name="form[_token]" value="abcde"> </form>

Как видите, form_rest вывел поля text, save и скрытый _token, которые не были отрендерены вручную.

Смотрите также

  • функция form_widget,
    которая выводит одно поле формы
  • функция form_row,
    которая выводит label, поле и ошибки
  • функция form_end,
    которая закрывает форму и выводит остаток полей
  • функция form_errors,
    которая выводит ошибки валидации формы
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить