Doctrine orm Zend\Form\Element\Collection包含来自条令类表继承的元素?
我对将ORM的类表继承(CTI)与ZF2的Doctrine orm Zend\Form\Element\Collection包含来自条令类表继承的元素?,doctrine-orm,zend-framework2,Doctrine Orm,Zend Framework2,我对将ORM的类表继承(CTI)与ZF2的Zend\Form结合使用有一个疑问。在我们的系统中,每个用户都可以有多个角色,这些角色是通过类表继承方案定义的,因此我们可以定义特定于角色的配置文件字段(即:“年级级别”仅适用于学生帐户)。要构造此属性,有一个帐户实体与帐户\角色有一个OneToMany关联(CTI“基本”类): 但是,如上所述,在设置角色字段时,目标元素(在本例中为字段集)是在集合级别指定的,这意味着集合必须是统一的。对于上述情况,我需要能够为集合的每个元素分别指定target\u元
Zend\Form
结合使用有一个疑问。在我们的系统中,每个用户都可以有多个角色,这些角色是通过类表继承方案定义的,因此我们可以定义特定于角色的配置文件字段(即:“年级级别”仅适用于学生帐户)。要构造此属性,有一个帐户
实体与帐户\角色
有一个OneToMany关联(CTI“基本”类):
但是,如上所述,在设置角色
字段时,目标元素
(在本例中为字段集)是在集合级别指定的,这意味着集合必须是统一的。对于上述情况,我需要能够为集合的每个元素分别指定target\u元素
,具体取决于它所代表的CTI的哪个成员
关于如何在绑定Account对象时仍然允许自动填充集合元素的方式实现这一点,有什么想法/建议吗?我已经侵入了一个适用于我的用例的解决方案:构建一个自定义的
非统一集合
非统一元素,并将其传递给一组原型(每个CTI实体一个)并在填充元素时克隆适当的实体
我将代码放在这里的要点中:
一个警告是模板功能不再工作,因为它不知道使用哪个原型
如果有人有任何建议,我仍然愿意看到一个更干净的方法来实现这一点:)
<?php
namespace CdliPortal\Entity;
use Doctrine\ORM\Mapping as ORM;
/**
* @ORM\Entity
* @ORM\Table(name="account")
*/
class Account implements AccountInterface
{
// Other Fields Omitted
/**
* @ORM\OneToMany(targetEntity="CdliPortal\Entity\Account\Role", mappedBy="account", cascade={"ALL"})
*/
protected $roles;
}
$roles = $user->getRoles();
if ( count($roles) > 0 ) {
$formAccount->add(array(
'type' => 'Zend\Form\Element\Collection',
'name' => 'roles',
'options' => array(
'count' => count($roles),
'target_element' => $this->serviceLocator->get('cdliportal_form_account_role'),
),
));
}