我正在使用一个Symfony2/Doctrine应用程序,该应用程序使用类表继承(http://docs.doctrine-project.org/en/2.0.x/reference/inheritance-mapping.html#class-table-inheritance)管理咨询中的投诉.每个Consult都有很多投诉(OneToMany),每种不同类型的投诉都有不同的结构和外观.投诉是一个集合,并使用JS动态添加.
此时,我能够坚持投诉并通过在持久性之前将它们重新设置为Controller中的相应类型来将它们链接到Consults.我遇到了一些问题,我打算将其迁移到表单事件(http://symfony.com/doc/current/cookbook/form/dynamic_form_generation.html)或其他类似的东西来简化流程.
但是,我在这一点上遇到的问题是,我无法使用FormView在视图中显示现有的Complaints,因为表单构建器要求我设置要显示的集合的类型.如果每个Consult只有一种类型的投诉,那就没问题了,但它们可以有多种类型,在表单构建器中设置类型会限制我使用那种类型.
是否有一些方法可以阻止FormView在没有类型的情况下转换为字符串或某种方式在每个投诉的基础上动态检测和分配类型(使用$ complaint-> getComplaintType(),也许)?
<?php
namespace Acme\ConsultBundle\Entity;
class Consult
{
/**
* @ORM\OneToMany(targetEntity="Acme\ConsultBundle\Entity\ComplaintBase", mappedBy="consult", cascade={"persist", "remove"})
*/
protected $complaints;
}
?>
<?php
namespace Acme\ConsultBundle\Entity;
/**
* Acme\ConsultBundle\Entity\ConsultBase
*
* @ORM\Entity
* @ORM\Table(name="ConsultComplaintBase")
* @ORM\HasLifecycleCallbacks
* @ORM\InheritanceType("JOINED")
* @ORM\DiscriminatorColumn(name="complaint_name", type="string")
* @ORM\DiscriminatorMap({
* "ComplaintDefault" = "Acme\ConsultBundle\Entity\ComplaintDefault",
* "ComplaintRosacea" = "Acme\ConsultBundle\Entity\ComplaintRosacea",
* "ComplaintBotox" = "Acme\ConsultBundle\Entity\ComplaintBotox",
* "ComplaintAcne" = "Acme\ConsultBundle\Entity\ComplaintAcne",
* "ComplaintUrticaria" = "Acme\ConsultBundle\Entity\ComplaintUrticaria",
* })
*/
abstract class ComplaintBase
{
/**
* @ORM\ManyToOne(targetEntity="Acme\ConsultBundle\Entity\Consult", inversedBy="complaints")
* @ORM\JoinColumn(name="consult_id", referencedColumnName="id")
*/
protected $consult; …Run Code Online (Sandbox Code Playgroud) forms doctrine single-table-inheritance class-table-inheritance symfony