Сделайте поле списка доступным для редактирования, когда это поле имеет тип many_to_one, используя в Sonata-project Symfony

Моя сущность

 /**
 * @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])

Появляется только ссылка на сущность без какой-либо возможности изменить.

Является ли это возможным?


person Oriol Planas    schedule 09.08.2017    source источник


Ответы (1)


В ожидании лучшего и более чистого решения я решил эту проблему, внедрив entityManager в свою сущность после решения этого ответа: Получить entityManager внутри 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;
}
person Oriol Planas    schedule 10.08.2017