php - Symfony - 如何使用表单和 DTO 创建实体
问题描述
我想用 symfony 表单和 DTO 创建实体。我试着像在 symfonycast 上看到的那样做 DTO 和表格。但是有什么问题,我想不通。
通过邮递员发送 json 文件后,出现错误:
类型化属性 App\Form\Model\CreateFacilityDTO::$pitchTypes 在初始化之前不能访问(500 Internal Server Error)
邮递员身体:
{“名称”:“legia”,“pitchTypes”:[“篮球”],“地址”:“kosynierów”}
你能告诉我我做错了什么吗?
<?php
namespace App\Controller;
use App\Entity\Facility;
use App\Form\CreateFacilityFormType;
use App\Form\Model\CreateFacilityDTO;
use Doctrine\ORM\EntityManagerInterface;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Annotation\Route;
/**
* @method saveEntities(array $array)
*/
class CreateFacilityAction extends AbstractController
{
/**
* @Route("/api/create/facility", name="create_facility")
* @param Request $request
* @return Response
*/
public function __invoke(Request $request, EntityManagerInterface $em)
{
$form = $this->createForm(CreateFacilityFormType::class);
$data = json_decode($request->getContent(), true);
$form->submit($data);
// if ($form->isSubmitted() && $form->isValid()) {
/** @var CreateFacilityDTO $facilityDto */
$facilityDto = $form->getData();
$createFacility = new Facility($facilityDto->name, $facilityDto->pitchTypes,
$facilityDto->address);
$em = $this->getDoctrine()->getManager();
$em->persist($createFacility);
$em->flush();
// return new Response($data, 201);
// }
return new Response($createFacility, 201);
}
}
<?php
namespace App\Form;
use App\Form\Model\CreateFacilityDTO;
use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Component\OptionsResolver\OptionsResolver;
class CreateFacilityFormType extends AbstractType
{
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder
->add('name')
->add('pitchTypes')
->add('address');
}
public function configureOptions(OptionsResolver $resolver)
{
$resolver->setDefaults([
'data_class' => CreateFacilityDTO::class,
]);
}
}
<?php
namespace App\Form\Model;
class CreateFacilityDTO
{
public string $name;
public array $pitchTypes;
public string $address;
}
解决方案
推荐阅读
- arrays - rxjs 在间隔中为数组中的每个项目调用 2 个服务
- c++ - 如何将函数分配给已定义的已声明函数
- system-verilog - 子模块是由求解器独立刺激还是通过连接的顶层模块刺激?
- batch-file - 批量混合特殊字符故障?
- html - * 是 CSS 中的合法选择器吗?如果是这样,为什么在将显示设置为阻止时会生成此输出?
- python - Python:从时间序列中删除前导和尾随零和相应的时间值
- javascript - 从 React Native组件获取图像源
- python - Python 代码未显示所需的输出但继续运行
- python - 在位置参数和关键字参数中压缩迭代
- java - Java:将多个独立脚本重构为一个脚本