Команда make:form
Команда make:form создаёт класс формы
в директории src/Form. Первым параметром
передаётся имя класса формы. Вторым необязательным
параметром указывается сущность, с которой форма
будет связана. После генерации класс содержит
метод buildForm для добавления полей
и метод configureOptions для настройки
параметров.
Синтаксис
php bin/console make:form <name> [<entity>]
Пример
Давайте создадим простую форму без привязки к сущности:
php bin/console make:form ArticleForm
В результате будет создан файл
src/Form/ArticleFormType.php:
<?php
namespace AppForm;
use SymfonyComponentFormAbstractType;
use SymfonyComponentFormFormBuilderInterface;
use SymfonyComponentOptionsResolverOptionsResolver;
class ArticleFormType extends AbstractType
{
public function buildForm(FormBuilderInterface $builder, array $options): void
{
$builder
->add('title')
->add('content')
;
}
public function configureOptions(OptionsResolver $resolver): void
{
$resolver->setDefaults([
// 'data_class' => Article::class,
]);
}
}
?>
Пример
Давайте создадим форму, связанную с сущностью
Article. Для этого вторым параметром
укажем класс сущности:
php bin/console make:form ArticleType Article
В результате будет создан файл
src/Form/ArticleType.php с автоматически
подставленными полями сущности:
<?php
namespace AppForm;
use AppEntityArticle;
use SymfonyComponentFormAbstractType;
use SymfonyComponentFormFormBuilderInterface;
use SymfonyComponentOptionsResolverOptionsResolver;
class ArticleType extends AbstractType
{
public function buildForm(FormBuilderInterface $builder, array $options): void
{
$builder
->add('title')
->add('content')
->add('createdAt')
;
}
public function configureOptions(OptionsResolver $resolver): void
{
$resolver->setDefaults([
'data_class' => Article::class,
]);
}
}
?>
Пример
Давайте используем сгенерированную форму в контроллере и отрендерим её в шаблоне:
<?php
namespace AppController;
use AppFormArticleType;
use SymfonyBundleFrameworkBundleControllerAbstractController;
use SymfonyComponentHttpFoundationRequest;
use SymfonyComponentHttpFoundationResponse;
use SymfonyComponentRoutingAttributeRoute;
class ArticleController extends AbstractController
{
#[Route('/article/new', name: 'article_new')]
public function new(Request $request): Response
{
$form = $this->createForm(ArticleType::class);
return $this->render('article/new.html.twig', [
'form' => $form,
]);
}
}
?>
Шаблон для отображения формы:
{{ form_start(form) }}
{{ form_widget(form) }}
<button type="submit">Save</button>
{{ form_end(form) }}
Смотрите также
-
команда
make:entity,
которая создаёт класс сущности Doctrine -
команда
make:crud,
которая генерирует контроллер и шаблоны CRUD -
команда
make:controller,
которая создаёт класс контроллера -
команда
debug:form,
которая выводит отладочную информацию о форме