Функция form_start
Функция form_start используется в Twig-шаблонах
для открытия HTML-тега формы. Первым параметром
передаётся объект формы, вторым - массив
дополнительных атрибутов. Функция автоматически
подставляет значения action и method
из конфигурации формы, а также добавляет скрытые
поля для токена CSRF и метода HTTP.
Если в форме используется метод POST,
функция выводит его как есть. Для методов
PUT, PATCH и DELETE
функция добавляет скрытое поле _method,
а сам тег формы получает метод POST.
Синтаксис
{{ form_start(form, {'attr': {'class': 'my-form'}}) }}
Пример
Давайте создадим простую форму с полем для ввода
имени и откроем её с помощью функции form_start.
Сначала создадим класс формы:
<?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('name', TextType::class)
->add('save', SubmitType::class);
}
}
?>
Теперь создадим контроллер, который создаёт форму и передаёт её в шаблон:
<?php
namespace App\Controller;
use App\Form\ArticleType;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Attribute\Route;
class ArticleController extends AbstractController
{
#[Route('/article', name: 'article_form')]
public function form(): Response
{
$form = $this->createForm(ArticleType::class);
return $this->render('article/form.html.twig', [
'form' => $form,
]);
}
}
?>
Отрендерим форму в Twig-шаблоне:
{{ form_start(form) }}
{{ form_row(form.name) }}
{{ form_row(form.save) }}
{{ form_end(form) }}
Результат выполнения кода:
<form name="article" method="post" action="/article">
<div>
<label for="article_name">Name</label>
<input type="text" id="article_name" name="article[name]" />
</div>
<div>
<button type="submit" id="article_save" name="article[save]">Save</button>
</div>
<input type="hidden" id="article__token" name="article[_token]" value="abcde" />
</form>
Пример
Давайте добавим CSS-класс и атрибут
novalidate к тегу формы с помощью
второго параметра функции form_start:
{{ form_start(form, {
'attr': {'class': 'my-form', 'novalidate': 'novalidate'}
}) }}
{{ form_row(form.name) }}
{{ form_row(form.save) }}
{{ form_end(form) }}
Результат выполнения кода:
<form name="article" method="post" action="/article" class="my-form" novalidate="novalidate">
<div>
<label for="article_name">Name</label>
<input type="text" id="article_name" name="article[name]" />
</div>
<div>
<button type="submit" id="article_save" name="article[save]">Save</button>
</div>
<input type="hidden" id="article__token" name="article[_token]" value="abcde" />
</form>
Пример
Давайте изменим HTTP-метод формы на PUT
с помощью опции method при создании формы:
<?php
namespace App\Controller;
use App\Form\ArticleType;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Attribute\Route;
class ArticleController extends AbstractController
{
#[Route('/article', name: 'article_form')]
public function form(): Response
{
$form = $this->createForm(ArticleType::class, null, [
'method' => 'PUT',
]);
return $this->render('article/form.html.twig', [
'form' => $form,
]);
}
}
?>
Теперь функция form_start автоматически
подставит метод POST в тег формы
и добавит скрытое поле _method со
значением PUT:
{{ form_start(form) }}
{{ form_row(form.name) }}
{{ form_row(form.save) }}
{{ form_end(form) }}
Результат выполнения кода:
<form name="article" method="post" action="/article">
<div>
<label for="article_name">Name</label>
<input type="text" id="article_name" name="article[name]" />
</div>
<div>
<button type="submit" id="article_save" name="article[save]">Save</button>
</div>
<input type="hidden" name="_method" value="PUT" />
<input type="hidden" id="article__token" name="article[_token]" value="abcde" />
</form>
Смотрите также
-
функция
form_end,
которая закрывает тег формы -
функция
form_row,
которая выводит строку поля формы -
функция
form_widget,
которая выводит виджет поля формы -
класс
Form,
который представляет объект формы