Соната - использовать хранилище сущности в админ - PullRequest
0 голосов
/ 05 марта 2019

Я работаю над проектом Symfony, используя Sonata.

Контекст:

Я получил разные лица:

  • Продукт (ID, categories (relation), characteristicValues (relation))
  • Категория (ID, characteristics (relation))
  • Характеристика (ID, id_category (relation), label).
  • Характеристическое значение (ID, id_product (relation), id_characteristic (relation), value)

Отношения:

  • Товар --OneToMany--> ХарактеристикаЦена
  • Категория -->OneToMany--> Характеристика
  • Характеристика -->OneToMany--> Характеристика Значение
  • Товар --ManyToMany--> Категория

Проблема:

Мне нужно получить все characteristics категорий продукта (и их values, если они установлены) в ProductAdmin и показать входные данные для каждой из них (например, Characteristic1: value1).

Что я сделал:

Я пытался вызвать функцию CharacteristicValueRepository в ProductAdmin, но хранилище не было создано.

Код ProductAdmin действительно прост:

final class ProductAdmin extends AbstractAdmin
{
  protected function configureFormFields(FormMapper $formMapper)
  {

    $formMapper
    ->with('Product information', ['class' => 'col-md-6'])
        ->add('name', TextType::class, [
            'label' => 'Name of the product'
        ])
        ->add('categories', EntityType::class, [
            'class' => Category::class,
            'choice_label' => 'name',
            'multiple' => true,
            'label' => 'Categories of the product'
        ])
  ->end();

}

protected function configureDatagridFilters(DatagridMapper $datagridMapper)
{
    $datagridMapper->add('name');
    $datagridMapper->add('categories');
}

protected function configureListFields(ListMapper $listMapper)
{
    $listMapper->add('id');
    $listMapper->addIdentifier('name');
    $listMapper->addIdentifier('categories');
}
}

Примечания:

Я использую последнюю версию всего (Symfony, Sonata, ...)

Если кто-то знает, как мне помочь, я был бы очень благодарен!

1 Ответ

1 голос
/ 12 марта 2019

Вам необходимо настроить пользовательский тип формы, например ProductCharacteristicsType.При использовании слушателей Form Event вы можете получить все характеристики и сформировать правильную коллекцию.Здесь у вас есть модель EAV (значение атрибута сущности).Это может вызвать замешательство у Symfony, но это управляемо.На SonataAdmin вы должны использовать свой собственный тип.

...