Функция form_end
Функция form_end используется в шаблонах Twig для завершения формы. Она выводит закрывающий тег </form>, а также автоматически добавляет все поля, которые не были выведены ранее (например, скрытые поля CSRF-токена). Функция принимает переменную формы, созданную с помощью form_start или переданную из контроллера. Вторым аргументом можно передать массив опций, например render_rest, который управляет выводом оставшихся полей.
Синтаксис
{{ form_end(form, options) }}
Пример
Давайте создадим простую форму в контроллере и выведем её в шаблоне с помощью form_start и form_end. Сначала создадим форму:
<?php
namespace App\Form;
use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\Extension\Core\Type\TextType;
use Symfony\Component\Form\Extension\Core\Type\SubmitType;
use Symfony\Component\Form\FormBuilderInterface;
class ArticleType extends AbstractType
{
public function buildForm(FormBuilderInterface $builder, array $options): void
{
$builder
->add('title', TextType::class)
->add('save', SubmitType::class, ['label' => 'Save']);
}
}
?>
Теперь выведем форму в шаблоне:
{{ form_start(form) }}
{{ form_row(form.title) }}
{{ form_row(form.save) }}
{{ form_end(form) }}
В результате выполнения будет сгенерирован следующий HTML-код:
<form name="article" method="post">
<div>
<label for="article_title">Title</label>
<input type="text" id="article_title" name="article[title]" />
</div>
<div>
<button type="submit" id="article_save" name="article[save]">Save</button>
</div>
<input type="hidden" id="article__token" name="article[_token]" value="..." />
</form>
Пример
Давайте рассмотрим, как работает опция render_rest. Если установить её в false, то form_end не будет выводить поля, которые не были отображены ранее (например, CSRF-токен). Это полезно, если вы хотите вывести все поля вручную:
{{ form_start(form) }}
{{ form_row(form.title) }}
{{ form_row(form.save) }}
{{ form_widget(form._token) }}
{{ form_end(form, {'render_rest': false}) }}
В этом случае HTML-код будет содержать только те поля, которые были выведены явно, а form_end добавит только закрывающий тег </form>:
<form name="article" method="post">
<div>
<label for="article_title">Title</label>
<input type="text" id="article_title" name="article[title]" />
</div>
<div>
<button type="submit" id="article_save" name="article[save]">Save</button>
</div>
<input type="hidden" id="article__token" name="article[_token]" value="..." />
</form>
Смотрите также
-
функция
form_start,
которая открывает форму -
функция
form_widget,
которая выводит одно поле формы -
функция
form_row,
которая выводит строку формы (метка, поле, ошибки) -
функция
form,
которая выводит всю форму целиком