Symfony4에서 FormType을 사용하여 Form을 전송합니다.

15380 단어 심포니PHP트위그
이번에 만들 예정인 테이블

Item(상품) 테이블


항목 이름
일본어 이름
금형
필수


id
ID(연번)
문자열


이름
상품명
문자열


price
가격
숫자
×

remarks
비고
문자열
×


우선은 엔티티의 작성.
$ php bin/console make:entity

그리고 양식 만들기
$ 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(),
            ]);
        }
    }

좋은 웹페이지 즐겨찾기