Symfony 4必需的TextType = false得到类型为“ string”,“ NULL”的期望参数

Ele*_*ero 1 php validation symfony4

我有一个TextType字段,其设置如下

类型:

        ->add('zipCode',TextType::class, array(
                'attr' => array('maxlength' => 10),
                'required' => false,
                'empty_data' => null
            )
        )
Run Code Online (Sandbox Code Playgroud)

从数据库加载数据时,该字段为null。我只是尝试提交表格,然后我得到

预期的参数类型为“字符串”,为“ NULL”。

在vendor / symfony / property-access / PropertyAccessor.php:174处Symfony \ Component \ PropertyAccess \ PropertyAccessor :: throwInvalidArgumentException('传递给App \ Entity \ Patients :: setZipCode()的参数1必须为字符串类型,给定为null ,

我不确定该如何解决?我想将值设为空...吗?也许是因为我没有在表单上加载初始数据?

下面的相关代码,如果您需要其他帮助,请告诉我:

枝条:

{{ form_widget(view_form.zipCode, { 'attr': {'class': 'mb-2 mb-sm-0 w-100'} }) }}
Run Code Online (Sandbox Code Playgroud)

控制器:

public function view(Request $request)
{
    $patientId = $request->query->get('id');

    if (!empty($patientId)) {
        $search = $this->getDoctrine()
            ->getRepository(Patients::class)
            ->find($patientId);

        if (is_null($search))
            $this->addFlash('danger', 'Invalid Patient');

        $form = $this->createForm(PatientViewType::class,$search);
    }
    else
        $form = $this->createForm(PatientViewType::class);

    dump($request);

    $form->handleRequest($request);

    if ($form->isSubmitted() && $form->isValid()) {
        $view = $form->getData()();

        $entityManager = $this->getDoctrine()->getManager();
        $entityManager->persist($view);
        $entityManager->flush();

        $this->addFlash('success', 'Patient record updated successfully!');
    }

    return $this->render('patient/view.html.twig', [
        'view_form' => $form->createView()
    ]);
}
Run Code Online (Sandbox Code Playgroud)

Str*_*dox 7

我想将值设为空...吗?也许是因为我没有在表单上加载初始数据?

根据异常消息,该方法Patients::setZipCode不接受空值。似乎已正确将值传递null给您的实体,但是Patients该类不接受该值。

我认为setZipCode签名看起来像这样:

public function setZipCode(string $zipCode): void
Run Code Online (Sandbox Code Playgroud)

您可以通过添加问号使它接受空值:

public function setZipCode(?string $zipCode): void
Run Code Online (Sandbox Code Playgroud)