Sonata-在admin中使用实体的存储库

时间:2019-03-05 14:42:47

标签: symfony symfony4 sonata-admin

我正在使用Sonata进行Symfony项目。

上下文:

我有不同的实体:

  • 产品(IDcategories (relation)characteristicValues (relation)
  • 类别(IDcharacteristics (relation)
  • 特征(IDid_category (relation)label)。
  • CharacteristicValue(IDid_product (relation)id_characteristic (relation)value

关系:

  • 产品--OneToMany-->特征值
  • 类别-->OneToMany-->特征
  • 特征-->OneToMany-->特征值
  • 产品--ManyToMany-->类别

问题:

我需要在ProductAdmin中获取产品类别的所有characteristics(如果设置了values,并且要显示它们的每个输入(例如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 个答案:

答案 0 :(得分:1)

您需要配置自定义表单类型,例如ProductCharacteristicsType。使用Form Event侦听器时,您可以获取所有特征并形成适当的集合。您这里拥有的是EAV(实体属性值)模型。这可能会给Symfony造成混乱,但是这是可以控制的。在SonataAdmin上,您必须使用该自定义类型。