当此字段是在Sonata-project Symfony中使用的many_to_one类型时,使列表字段可编辑

时间:2017-08-09 22:41:30

标签: sonata-admin many-to-one symfony-3.2

我的实体

 /**
 * @ORM\ManyToOne(targetEntity="Estat", inversedBy="temes")
 */
private $estat;


public function setEstat(\Ncd\ForumBundle\Entity\Estat $estat = null)
{
    $this->estat = $estat;

    return $this;
}

我的管理员

protected function configureListFields(ListMapper $listMapper)
{

    //$estats=$this->getEstatsPossibles()->toArray();
    $estats=array();
    foreach($this->getEstatsPossibles() as $estat)
    {
        $estats[$estat->getId()]=$estat->getNom();
    }

    $listMapper
      ->add('estat', 'choice',['editable' => true,'choices'=> $estats])

我想在列表网格中编辑estat字段。通过这种方式实现它我可以编辑它,组合框出现但是当我选择一个选项时我得到一个例外,因为我的实体的setEstat函数不会返回一个Estat实体,而是一个字符串(数组的键)。

尝试

->add('estat', 'many_to_one',['editable' => true,'choices'=> $estats])

只显示指向该实体的链接,且无法更改。

有可能吗?

1 个答案:

答案 0 :(得分:-1)

等待一个更好,更清洁的解决方案我解决了这个在这个答案的解决方案之后在我的实体中注入一个entityManager: Get entityManager inside an Entity

然后,在我的实体中,我改变了setEstat函数:

public function setEstat( $estat = null)
{
    if (is_object($estat) &&   get_class($estat)=='Ncd\ForumBundle\Entity\Estat')
    {
        $this->estat=$estat;

    } else {
        $estat_o=$this->em->getRepository('Ncd\ForumBundle\Entity\Estat')->find((int)$estat);
        $this->estat = $estat_o;
    }


    return $this;
}