今回作成する予定のテーブル
Item(商品)テーブル
項目名 | 日本語名 | 型 | 必須 |
---|---|---|---|
id | ID(連番) | 文字列 | 〇 |
name | 商品名 | 文字列 | 〇 |
price | 価格 | 数字 | × |
remarks | 備考 | 文字列 | × |
まずはエンティティの作成。
$ php bin/console make:entity
そしてFormを作成
$ php bin/console make:form Item
The name of Entity or fully qualified model class name that the new form will be bound to (empty for none):
> Item
I?[K?7?[30;47mtem?[39;49m?8t?[K?7?[30;47mem?[39;49m?8e?[K?7?[30;47mm?[39;49m?8m?[K?7?8
?[34mcreated?[39m: src/Form/ItemType.php
?[37;42m ?[39;49m
?[37;42m Success! ?[39;49m
?[37;42m ?[39;49m
Next: Add fields to your form and start using it.
Find the documentation at ?[33mhttps://symfony.com/doc/current/forms.html?[39m
以下にファイルが作成されることを確認
src/Form/ItemType.php
マイグレーションの作成
$ php bin/console make:migration
マイグレーションの実行
(質問にはyesで大丈夫)
$ php bin/console doctrine:migrations:migrate
Controllerも作成しておく。
※ItemController
$ php bin/console make:controller
ItemTypeのbuildFormの中身を編集する
src/Form/ItemType.php
class ItemType extends AbstractType
{
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder
->add('name', TextType::class, array(
'label' => '商品名',
))
->add('price', IntegerType::class, array(
'label' => '価格',
'required' => false,
))
->add('remarks', TextareaType::class, array(
'label' => '備考',
'required' => false,
))
->add('保存', SubmitType::class, array())
;
}
public function configureOptions(OptionsResolver $resolver)
{
$resolver->setDefaults([
'data_class' => Item::class,
]);
}
}
ItemControllerにcreateメソッドを作成しておく。
src/Controller/ItemController.php
/**
* @Route("/item/create", name="item_create")
*/
public function create(Request $request): Response
{
$item = new item();
$form = $this->createForm(ItemType::class, $item);
if ($request->getMethod() == 'POST') {
$form->handleRequest($request);
$item = $form->getData();
$manager = $this->getDoctrine()->getManager();
$manager->persist($item);
$manager->flush();
return $this->redirect('/item');
} else {
return $this->render('item/create.html.twig', [
'title' => 'Item作成',
'form' => $form->createView(),
]);
}
}
create.html.twigに「{{ form(form) }}」の記述を追加する。
templates/item/create.html.twig
<div class="example-wrapper">
<h2>{{ title }}</h2>
{{ form(form) }}
</div>
Formから新しいデータが作成できることを確認。
おまけ
編集と削除のメソッドも下記に記述しておく。
(テンプレートは同じで問題なし)
src/Controller/ItemController.php
/**
* @Route("/item/update/{id}", name="item_update")
*/
public function update(Request $request, Item $item): Response
{
$form = $this->createForm(ItemType::class, $item);
if ($request->getMethod() == 'POST') {
$form->handleRequest($request);
$item = $form->getData();
$manager = $this->getDoctrine()->getManager();
$manager->flush();
return $this->redirect('/item');
} else {
return $this->render('item/create.html.twig', [
'title' => 'Item更新',
'form' => $form->createView(),
]);
}
}
/**
* @Route("/item/delete/{id}", name="item_delete")
*/
public function delete(Request $request, Item $item): Response
{
$form = $this->createForm(ItemType::class, $item);
if ($request->getMethod() == 'POST') {
$form->handleRequest($request);
$item = $form->getData();
$manager = $this->getDoctrine()->getManager();
$manager->remove($item);
$manager->flush();
return $this->redirect('/item');
} else {
return $this->render('item/create.html.twig', [
'title' => 'Item削除',
'form' => $form->createView(),
]);
}
}