Получить идентификатор родительского объекта в CollectionType Admin - PullRequest
0 голосов
/ 11 марта 2019

Я создаю сущность basketElement , которая связана с родительской сущностью basket через администратор экземпляра Sonata \ Form \ Type \ CollectionType.При создании сущности basketElement Мне также нужно вызвать функцию службы, которой требуется идентификатор сущности basket .

. Сейчас у меня есть администратор:

class BasketAdmin extends AbstractAdmin {
    /**
     * @param \Sonata\AdminBundle\Form\FormMapper $formMapper
     */
    public function configureFormFields(FormMapper $formMapper): void
    {
        $formMapper->with('basket.group.basketElements')
            ->add('basketElements', Sonata\Form\Type\CollectionType::class)
        ;
    }
}

Администратор поля basketElements выглядит следующим образом:

class BasketElementAdmin extends AbstractAdmin {
    /**
     * @param \Sonata\AdminBundle\Form\FormMapper $formMapper
     */
    public function configureFormFields(FormMapper $formMapper): void
    {
        $formMapper->with('basketElement.group.products')
            ->add('basket', Sonata\AdminBundle\Form\Type\ModelHiddenType::class)
        ;
    }

    public function prePersist(){
        $this->myService->myFunction($this->getParent()->getSubject()->getId());
    }
}

Как получить доступ к родительскому объекту?

1 Ответ

0 голосов
/ 19 марта 2019

Я нашел 2 решения;

  • link_parameters можно добавить к аргументу fieldDescriptionOptions метода add в поле CollectionType. Чем в basketElementAdmin можно извлечь параметр ссылки из объекта запроса и использовать его для получения связанной сущности.
    /**
     * @param \Sonata\AdminBundle\Form\FormMapper $formMapper
     */
    public function configureFormFields(FormMapper $formMapper): void
        {
            $formMapper->with('basket.group.basketElements')
                ->add('basketElements', Sonata\Form\Type\CollectionType::class, [], [
                    'link_parameters' => ['basket_id' => $this->getSubject()->getId()]
                ])
            ;
        }
    }
  • Функция службы, которой требуется родительский идентификатор, может быть вызвана и установлена ​​в childAdmin в методах prePersist и preUpdate родительского администратора
...