Symfony Form Collection - как получить идентификатор сущности? - PullRequest
0 голосов
/ 20 октября 2018

У меня есть ShopCategoryCollectionType, который хранит только ShopCategoryType как коллекцию.

Мне нужно получить доступ к идентификатору одной ShopCategory, чтобы сгенерировать путь редактирования для сущности.

Я создал собственный виджет для отображенияShopCategoryWidget

        {{ dump(form.vars.data) }}

возвращает:

ShopCategory {#7325 ▼
  -id: 13
  -name: "items items"
  -slug: "items-items"
  -status: 1
  -products: PersistentCollection {#7445 ▶}
  -position: 0
}

, но когда я пытаюсь получить доступ к атрибуту сущности

{{ dump(form.vars.data.anyAttribute) }}

, я получил:

Impossible to access an attribute ("name") on a null variable.

Как мне получить атрибут id объекта ShopCategory?


edit:

Я обнаружил проблему, почему это происходит.

  1. Я помещаю данные в ShopCategoryCollectionType

     public function onPreSetData(FormEvent $event)
     {
        $data = [
            'categories' => $this->categoryRepository->findAll()
        ];
    
        $event->setData($data);
      }
    
  2. Но когда я пытаюсь получить данные:

    class ShopCategoryType extends AbstractType {
    
        public function buildForm(FormBuilderInterface $builder, array $options)
        {
             $builder
            /** fields */
            ->addEventListener(FormEvents::POST_SET_DATA, function(FormEvent $formEvent) {
            dump($formEvent->getData());
        });
    }
    
  3. Результат таков:

    In ShopCategoryType.php line 30:
        null
     In ShopCategoryType.php line 30:
        ShopCategory {#7574 ▼
        -id: 20
     In ShopCategoryType.php line 30:
        ShopCategory {#7575 ▼
        -id: 21
     In ShopCategoryType.php line 30:
        ShopCategory {#7576 ▼
        -id: 22
    
    /** and rest of objects */
    }
    

Почему я получаю нулевое значение при первом сбросе?

Ответы [ 2 ]

0 голосов
/ 20 октября 2018

Если у вас есть ShopCategoryCollectionType внутри вашего основного FormType и {{ form }} точек в этом FormType:

FormType >> ShopCategoryCollectionType >> ShopCategoryType

, получить доступ к записям коллекции, используя:

{{dump(form.children.shopCategories.vars.value[0].id)}}

Где, 0, указывает на первую ShopCategory

0 голосов
/ 20 октября 2018

Вы можете получить доступ к текущим данным в twig вашей формы через form.vars.value

form.vars.value.{fieldName}

Например:

form.vars.value.name

Вы можете показать все имена полей следующим образом:

dump(form.vars.value)
...