Php 具有集合一对一关系的嵌入表单的Symfony 5错误

Php 具有集合一对一关系的嵌入表单的Symfony 5错误,php,symfony,one-to-one,symfony5,Php,Symfony,One To One,Symfony5,我试图嵌入集合类型(一对一关系)的表单,但出现错误: 属性路径“patitPatientsSafeData”处给定的类型应为“App\Entity\PatientsSafeData”、“数组”的参数 在实体患者中 <?php namespace App\Entity; use App\Repository\PatientsRepository; use Doctrine\ORM\Mapping as ORM; class Patients { private $id;

我试图嵌入集合类型(一对一关系)的表单,但出现错误:

属性路径“patitPatientsSafeData”处给定的类型应为“App\Entity\PatientsSafeData”、“数组”的参数

在实体患者中

<?php

namespace App\Entity;

use App\Repository\PatientsRepository;
use Doctrine\ORM\Mapping as ORM;


class Patients
{  
    private $id;   
    private $patiLabel;

    /**
     * @ORM\OneToOne(targetEntity=PatientsSafeData::class, mappedBy="pasaPatient", cascade={"persist", "remove"})
     */
    private $patiPatientsSafeData;

要解决此问题,必须为PatitPatientSafeData字段创建自定义表单类型。查看如何创建自定义FormType。
如果不想手动创建表单类型,可以使用symfony cli基于PatientSafeData实体创建一个“子”表单,然后用刚刚创建的新FormType::class替换CollectionType。
您的PatientsType表单将如下所示:

public function buildForm(FormBuilderInterface $builder, array $options)
    {
        $builder
            ->add('patiLabel',TextType::class, ["label" => "Label"])
            ->add('patiPatientsSafeData' , PatientSafeDataType::class)
        ;
请注意,我已将CollectionType替换为新的PatientsAfetDataType表单,您以前应该使用cli创建该表单。
现在,您的模板将如下所示

{{ form_start(patientForm) }}
    {{ form_row(patientForm.patiLabel) }}
    {{ form_row(patientForm.patiPatientsSafeData) }}
    <button type="submit">Submit</button>
{{ form_end(patientForm) }}
                
{{form_start(patientForm)}
{{form_行(patientForm.patiLabel)}
{{form_行(patientForm.patitPatientsSafeData)}
提交
{{form_end(patientForm)}

我想说的是,
1对1
应该映射为一个简单的集合,而不是一个集合。另外,您已经非常明确地使用了
allow\u add
选项,所以您可能想要的是一个一对一的关系。关键是,
CollectionType
返回一个
SafeData
s数组。
 <div class="card-body">
        <p>Save Data</p>
        <p>
            <ul class="safeData" id="safeData" data-prototype="{{ form_widget(form.patiPatientsSafeData.vars.prototype)|e('html_attr') }}">
                {% for patSafeData in form.patiPatientsSafeData %}


                    <li>
                        {{ form_row(patSafeData.pasaName) }}
                        {{ form_row(patSafeData.pasaSurname) }}
                        {{ form_row(patSafeData.pasaDOB) }}


                    </li>
                {% endfor %}
            </ul>
        </p>
    </div>
public function buildForm(FormBuilderInterface $builder, array $options)
    {
        $builder
            ->add('patiLabel',TextType::class, ["label" => "Label"])
            ->add('patiPatientsSafeData' , PatientSafeDataType::class)
        ;
{{ form_start(patientForm) }}
    {{ form_row(patientForm.patiLabel) }}
    {{ form_row(patientForm.patiPatientsSafeData) }}
    <button type="submit">Submit</button>
{{ form_end(patientForm) }}