php - Symfony 5 带有集合一对一关系的嵌入表单出现错误

标签 php symfony one-to-one symfony5

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

预期参数类型为“App\Entity\PatientsSafeData”,在属性路径“patiPatientsSafeData”处给出“数组”。

在实体患者中

<?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;

以及实体PatientSafeData

<?php

namespace App\Entity;

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


class PatientsSafeData
{
   
    private $id;

  
    /**
     * @ORM\OneToOne(targetEntity=Patients::class, inversedBy="patiPatientsSafeData", cascade={"persist", "remove"})
     * @ORM\JoinColumn(nullable=false)
     */
    private $pasaPatient;

表单类型


<?php

namespace App\Form;
use App\Form\PatientsSafeDataType;
use App\Entity\Patients;
use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\Extension\Core\Type\CollectionType;
use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Component\OptionsResolver\OptionsResolver;
use Symfony\Component\Form\Extension\Core\Type\TextType;

class PatientsType extends AbstractType
{
    public function buildForm(FormBuilderInterface $builder, array $options)
    {
        $builder
            ->add('patiLabel',TextType::class, ["label" => "Label"])
            ->add('patiPatientsSafeData' , CollectionType::class,
                [
                    'entry_type' => PatientsSafeDataType::class,
                    'entry_options' => ['label' => 'Safe Data'],
                    'allow_add' => true
                ])

模板:

 <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>

我在保存数据时出错。 我不知道我错在哪里 请问,有什么想法吗? 提前致谢

最佳答案

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

public function buildForm(FormBuilderInterface $builder, array $options)
    {
        $builder
            ->add('patiLabel',TextType::class, ["label" => "Label"])
            ->add('patiPatientsSafeData' , PatientSafeDataType::class)
        ;

请注意,我已将 CollectionType 替换为您之前使用 cli 创建的新 PatientSafeDataType 表单。
现在您的模板将如下所示

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

关于php - Symfony 5 带有集合一对一关系的嵌入表单出现错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64238943/

相关文章:

PHP 在 HTML 表格中显示数组

javascript - 响应式 html 在 iframe 元素上捕获滑动手势

symfony - 我无法访问 Controller 中的容器

image - Symfony2 LiipImagineBundle 默认图像

java - Hibernate @OneToOne 与多个对象的关系?

php - 验证基础

php - codeigniter 将许多图像名称插入数据库

php - 使用 Silex/Symfony 传递响应后删除文件

sql - 如何在 SQL Server 中创建真正的一对一关系

Java Hibernate OneToOne 异常映射错误?