是否可以在sonata_type_collection中实现sonata_type_collection?

时间:2013-08-10 01:25:32

标签: symfony sonata-admin symfony-sonata

观看这篇文章我相信这是可能的,但我不知道他是如何配置他的实体的。

Sonata Admin Bundle Type Collection Customisation

我的管理员文件与他完全相同。但是这些其他帖子我发现奏鸣曲不支持这种能力。

https://github.com/sonata-project/SonataAdminBundle/issues/262

https://github.com/sonata-project/SonataAdminBundle/issues/802

拜托,有人可以提出一些建议来解决它!

更新:( Dour High Arch)

 .../SimBundle/Admin/EmpleadoAdmin.php
protected function configureFormFields(FormMapper $formMapper)
{
      $formMapper
        ->with('Tecnico')
           ->add('empleadoTecnico', 'sonata_type_collection'), 
                            array('edit' => 'inline','sortable'=>'pos','inline' => 'table'))
        ->end()
        ;

}

  .../SimBundle/Admin/TecnicoAdmin.php
protected function configureFormFields(FormMapper $formMapper)
{
    $formMapper
        ->add('salarioHora',null,array('label'=>'Salario por hora:'))
        ->with('Experiencia')
        ->add('experienciaLaboral', 'sonata_type_collection', array('label'=>'Experiencia Laboral:'),
                                                 array('edit' => 'inline','sortable'=>'pos','inline' => 'table'))
        ->end()


        ;   
}

   .../SimBundle/Admin/EmpExperienciaLaboralAdmin.php
protected function configureFormFields(FormMapper $formMapper)
{
    $formMapper
        ->add('nombreJefeInmediato',null,array('label'=>'Nombre Jefe Inmediato:'))      
        ;   
}

实体

...\SimBundle\Entity;

类EmpEmpleado {

/**
 *
 * @ORM\OneToMany(targetEntity="Tecnico", mappedBy="idEmpleado", cascade={"all"}, orphanRemoval=true)
 *
 */
private $empleadoTecnico;

}

...\SimBundle\Entity;

类Tecnico {

/**
 * @var \EmpEmpleado
 *
 * @ORM\OneToOne(targetEntity="EmpEmpleado", inversedBy="empleadoTecnico")
 * @ORM\JoinColumns({
 *   @ORM\JoinColumn(name="id_empleado", referencedColumnName="id")
 * })
 */
private $idEmpleado;

/**
 *
 * @ORM\OneToMany(targetEntity="EmpExperienciaLaboral", mappedBy="idEmpleado", cascade={"all"}, orphanRemoval=true)
 *
 */
private $experienciaLaboral;

}

...\SimBundle\Entity;

班级EmpExperienciaLaboral {

/**
 * @var \Tecnico
 *
 * @ORM\ManyToOne(targetEntity="Tecnico", inversedBy="experienciaLaboral")
 * @ORM\JoinColumns({
 *   @ORM\JoinColumn(name="id_empleado", referencedColumnName="id")
 * })
 */
private $idEmpleado;

}

当我正在尝试添加experienciaLaboral时,它是faild: 致命错误:在

中的非对象上调用成员函数getName()

Schema看起来像这样:

EmpEmpleado - > (OneToMany) - > Tecnico - > (OneToMany) - > EmpExperienciaLaboral

(对不起,我不能把图像,这是我的第一个问题,我没有10个声誉)

1 个答案:

答案 0 :(得分:4)

不,你不能拥有嵌套集合......这个限制是由于admin uniqid的工作原理。唯一ID用于避免共享相同管理员的元素之间发生冲突。

现在adminId不是一个堆栈,你只有adminId和childAdminId ......在你的情况下你需要有一个childChildAdminId ......