Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/symfony/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 表单使用来自不同实体的混合字段,并在Symfony2中使用细枝进行渲染 问题_Php_Symfony_Doctrine Orm - Fatal编程技术网

Php 表单使用来自不同实体的混合字段,并在Symfony2中使用细枝进行渲染 问题

Php 表单使用来自不同实体的混合字段,并在Symfony2中使用细枝进行渲染 问题,php,symfony,doctrine-orm,Php,Symfony,Doctrine Orm,我有一个由许多实体(模型)组成的Symfony2 2.3项目。这些模型包括地址、人员、应用程序等。我需要一个表单来表示在线应用程序中的不同步骤。应用程序步骤都包含来自不同实体的许多字段 一开始是这样的;我创建了匹配的表单类型和细枝模板。在我需要混合表格之前,一切都很好 例如,对于一个表单,我需要: 名字 姓 多巴哥 邮政编码(来自地址实体) 应用程序开始日期(来自应用程序实体) 如您所见,表单由来自不同表单的两个额外元素组成。 因此,我有一个问题,那就是将这三个层面与教义的使用捆绑在一起;实

我有一个由许多实体(模型)组成的Symfony2 2.3项目。这些模型包括地址、人员、应用程序等。我需要一个表单来表示在线应用程序中的不同步骤。应用程序步骤都包含来自不同实体的许多字段

一开始是这样的;我创建了匹配的表单类型和细枝模板。在我需要混合表格之前,一切都很好

例如,对于一个表单,我需要:

  • 名字
  • 多巴哥
  • 邮政编码(来自地址实体)
  • 应用程序开始日期(来自应用程序实体)
如您所见,表单由来自不同表单的两个额外元素组成。 因此,我有一个问题,那就是将这三个层面与教义的使用捆绑在一起;实体,来自类型和细枝模板。()

当前解决方案 到目前为止,我的模型已经按预期设置好了。因此,地址详细信息在地址实体中,个人详细信息存储在个人实体中

然后,我创建了我希望它们如何输出到屏幕上的所有表单类型,其中包含混合字段。因此,例如,我有一个Step-1 FormType,它具有:

  • 名字
  • 第二个名字
  • 多巴哥
  • 住址门牌号
  • 地址邮政编码
然后在Twig中简单地输出字段。然后,我将添加自定义验证和自定义方法,以将数据保存到数据库中的各个表中。我得出的结论是,我必须这样做,因为没有任何形式可以映射到单个实体

我需要什么 如果有人能对这一点有所了解,并为我提供一些例子,我将不胜感激

正如您在下面看到的,我有一些字段,我已经硬编码,这些字段表示与其他实体和FormType不同的属性

  • 我需要一种方法使所有这些实体都处于正常形式
  • 具有不同的FormType步骤,这些步骤具有来自这些不同实体的混合属性
  • 一些表单类型将嵌入其他表单类型,例如地址-用户可以添加3
  • 使用Twig tempalte可以简单地呈现每个小部件
  • 加载表单、检查表单是否有效并将值保存到自己表中的控制器
也许,我必须创建一个完全自定义的方法来单独保存值,但我希望有一种“Symfony方式”来实现这一点

示例代码 假设所有的getter和setter都是用条令创建的。 假设所有条令映射都添加了链接表的一对一关系

个人实体:

private $id
private $first_name
private $last_name
private $dob
地址实体

private $address_number
private $address_postcode
private $address_lived_years
private $address_lived_months
private $id
private $plan
应用实体

private $address_number
private $address_postcode
private $address_lived_years
private $address_lived_months
private $id
private $plan
AddresType

$builder->add('address_number', 'text')
        ->add('address_postcode', 'text')
$builder->add('first_name', 'text')
        ->add('last_name', text')
        ->add('dob', 'date')
        ->add('address_1', 'collection', array('type' => new AddressType()));
        ->add('address_lived_years', 'text')
        ->add('address_lived_months', 'text')
        ->add('plan', 'text')
混合格式示例:Step1Type

$builder->add('address_number', 'text')
        ->add('address_postcode', 'text')
$builder->add('first_name', 'text')
        ->add('last_name', text')
        ->add('dob', 'date')
        ->add('address_1', 'collection', array('type' => new AddressType()));
        ->add('address_lived_years', 'text')
        ->add('address_lived_months', 'text')
        ->add('plan', 'text')
细枝 控制员将所有这些都整合在一起 我没有看到任何定义。由于您要求用户输入来自person实体的一些数据和来自address实体的一些数据,我假设您需要保存它们并将它们标记为相关(如中所示,保存在
person
表中的行应以某种方式链接到保存在
address
表中的行)。对于您的情况,我认为OneToOne应该是这样的(一个人链接到一个地址…反之亦然)。然而,在现实生活中,情况并非如此

然后,您应该定义特定的*类型类(
例如PersonalAddressType
),以便仅保存该特定情况的所需字段,并使用其中的条令关系和嵌入表单。请参阅S2站点上的相关文档。对于你的情况,我认为这是正确的开始


如果你需要更多的细节(或者一些例子)。。。让我知道。如果有必要,我将尝试编写一些代码。

symfony 1.3-1.4有一种将表单“合并”在一起的方法-也许Symfony2有类似的功能?干杯,哈弗。它确实需要一个使用getForm()方法并为其分配实体的新实例的实例。您需要做的就是将它持久化()以将其保存到数据库中。问题是,如果我的表单没有1-1映射到我的实体,我无法找到一种标准化的方法;但是表单映射到许多实体。是的,我认为1.x合并做到了这一点,尽管我从来没有花过足够的时间来理解它。其想法是,可以将客户表单(针对单个客户)与订单表单(针对多个订单)合并,以创建一个可以编辑上述所有内容的表单。除了建议“合并表单”可能是一组很好的搜索关键字之外,我不能提供更多的帮助!谢谢这个半身人。我将对此进行研究。Symfony2有一个
inherit\u data\u选项
,允许在表单实体之间合并/共享字段,但我只花了时间浏览您的问题,因此我不确定它是否适用于您的整个问题。然而,值得一看的是:抱歉,塞尔古说得不清楚。条令映射设置。现在一切都设置为一对一。因此,对于每个实体(例如Person),我应该创建一个FormType(PersonStep1Type),它只包含步骤1所需的属性?e、 “名字”和“姓氏”?然后对于第2步,PersonStep2Type只包含DOB?然后我在控制器中猜测,我只是创建/重新加载Person实体的实例并填充。因此你是说我应该为每个实体的每个步骤创建一个新的FormType?而不是为我所有结合属性的步骤创建步骤1、步骤2?在查看我的代码后,您可能会进入winner Sergiu;我同意你的建议。我将进一步发展,看看这是否提供了解决方案。在表单中添加表单是正确的方法。我创建了一个特定的表单,每个实体,每个步骤;我希望在细枝模板中公开的属性的。这进一步使我能够坚持轻松地使用原则。感谢所有的answ