symfony 将POST请求转换为学说实体

r1zhe5dt  于 2022-11-16  发布在  其他
关注(0)|答案(1)|浏览(176)

来自一个NodeJS环境,这似乎是一个没有头脑,但我不知何故没有弄清楚。
给定函数:

/**
     * @Route("/", name="create_stuff", methods={"POST"})
     */
    public function createTouristAttraction($futureEntity): JsonResponse
    {
      ...
     }

futureEntity具有与我的PersonEntity相同的结构。
将$futureEntityMap到PersonEntity的最佳方法是什么?
我试图手动分配它,然后运行我的验证,这似乎工作,但我认为这是繁琐的,如果一个模型有30多个字段...
提示:我在Symfony 4.4
谢谢你,谢谢你

daupos2t

daupos2t1#

Doc:如何在Symfony中处理表单
1.您需要安装Form软件包:composer require symfony/form(如果安装了Flex软件包,则为composer require form
1.创建一个新的App\Form\PersonType类,以设置表单的字段和更多内容:文件
1.在App\Controller\PersonController中,当您示例化表单时,只需传递PersonType::class作为第一个参数,并传递一个新的空Person实体作为第二个参数(表单包将处理其余部分):

$person = new Person();
$form = $this->createForm(PersonType::class, $person);

整个控制器代码:

<?php

namespace App\Controller;

use App\Entity\Person;
use App\Form\PersonType;
use Doctrine\ORM\EntityManagerInterface;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Annotation\Route;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;

class PersonController extends AbstractController
{

    private $entityManager;

    public function __construct(EntityManagerInterface $entityManager) {
        $this->entityManager = $entityManager;
    }

    /**
     * @Route("/person/new", name="person_new")
     */
    public function new(Request $request): Response
    {
        $person = new Person(); // <- new empty entity
        $form = $this->createForm(PersonType::class, $person);

        // handle request (check if the form has been submited and is valid)
        $form->handleRequest($request);
        if ($form->isSubmitted() && $form->isValid()) { 

            $person = $form->getData(); // <- fill the entity with the form data

            // persist entity
            $this->entityManager->persist($person);
            $this->entityManager->flush();

            // (optional) success notification
            $this->addFlash('success', 'New person saved!');

            // (optional) redirect
            return $this->redirectToRoute('person_success');
        }

        return $this->renderForm('person/new.html.twig', [
            'personForm' => $form->createView(),
        ]);
    }
}

1.在templates/person/new.html.twig中显示表单的最低要求:只需在所需位置添加{{ form(personForm) }}

相关问题