Метод add класса FormBuilder
Метод add класса FormBuilder добавляет
новое поле в форму. Первым параметром передаётся
имя поля, вторым - тип поля (класс FieldType),
третьим - массив опций поля. Метод возвращает
объект FormBuilder, поэтому вызовы можно
выстраивать в цепочку.
Синтаксис
public function add(string $name, string $type = TextType::class, array $options = []): self
Пример
Давайте создадим форму с одним текстовым полем:
<?php
namespace AppForm;
use SymfonyComponentFormAbstractType;
use SymfonyComponentFormFormBuilderInterface;
use SymfonyComponentFormExtensionCoreTypeTextType;
class ArticleType extends AbstractType
{
public function buildForm(FormBuilderInterface $builder, array $options): void
{
$builder->add('title', TextType::class);
}
}
?>
Пример
Давайте добавим поле вместе с массивом опций:
<?php
namespace AppForm;
use SymfonyComponentFormAbstractType;
use SymfonyComponentFormFormBuilderInterface;
use SymfonyComponentFormExtensionCoreTypeTextType;
class ArticleType extends AbstractType
{
public function buildForm(FormBuilderInterface $builder, array $options): void
{
$builder->add('title', TextType::class, [
'label' => 'Article title',
'required' => true,
]);
}
}
?>
Пример
Давайте выстроим несколько вызовов метода add в цепочку:
<?php
namespace AppForm;
use SymfonyComponentFormAbstractType;
use SymfonyComponentFormFormBuilderInterface;
use SymfonyComponentFormExtensionCoreTypeTextType;
use SymfonyComponentFormExtensionCoreTypeTextareaType;
use SymfonyComponentFormExtensionCoreTypeIntegerType;
use SymfonyComponentFormExtensionCoreTypeCheckboxType;
class ArticleType extends AbstractType
{
public function buildForm(FormBuilderInterface $builder, array $options): void
{
$builder
->add('title', TextType::class)
->add('content', TextareaType::class)
->add('views', IntegerType::class)
->add('published', CheckboxType::class, [
'required' => false,
]);
}
}
?>
Пример
Давайте создадим форму в контроллере и выведем её на страницу:
<?php
namespace AppController;
use AppFormArticleType;
use SymfonyBundleFrameworkBundleControllerAbstractController;
use SymfonyComponentHttpFoundationResponse;
use SymfonyComponentRoutingAttributeRoute;
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->createView(),
]);
}
}
?>
Результат выполнения кода:
<form name="article" method="post">
<div>
<label for="article_title">Title</label>
<input type="text" id="article_title" name="article[title]">
</div>
<div>
<label for="article_content">Content</label>
<textarea id="article_content" name="article[content]"></textarea>
</div>
<button type="submit">Save</button>
</form>
Смотрите также
-
класс
FormBuilder,
который строит форму из набора полей -
метод
create,
который создаёт поле без добавления в форму -
метод
get,
который возвращает поле по имени -
метод
remove,
который удаляет поле из формы