Sonata - 在管理中使用实体的存储库
Sonata - Use the repository of an entity in admin
我正在使用 Sonata 开发 Symfony 项目。
上下文:
我有不同的实体:
- 产品(
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-->
类别
问题:
我需要在 ProductAdmin 中获取产品类别的所有 characteristics
(以及它们的 values
,如果已设置),并显示每个类别的输入(例如特征 1 : 值 1).
我做了什么:
我试图在 ProductAdmin
中调用一个函数 CharacteristicValueRepository
,但是存储库没有被实例化。
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、奏鸣曲……)
如果有人知道如何帮助我,我将不胜感激!
您需要配置自定义表单类型,例如 ProductCharacteristicsType。在使用表单事件侦听器时,您可以获取所有特征并形成适当的集合。您在这里拥有的是 EAV(实体属性值)模型。这可能会给 Symfony 带来混乱,但它是可控的。在 SonataAdmin 上,您必须使用您的自定义类型。
我正在使用 Sonata 开发 Symfony 项目。
上下文:
我有不同的实体:
- 产品(
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-->
类别
问题:
我需要在 ProductAdmin 中获取产品类别的所有 characteristics
(以及它们的 values
,如果已设置),并显示每个类别的输入(例如特征 1 : 值 1).
我做了什么:
我试图在 ProductAdmin
中调用一个函数 CharacteristicValueRepository
,但是存储库没有被实例化。
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、奏鸣曲……)
如果有人知道如何帮助我,我将不胜感激!
您需要配置自定义表单类型,例如 ProductCharacteristicsType。在使用表单事件侦听器时,您可以获取所有特征并形成适当的集合。您在这里拥有的是 EAV(实体属性值)模型。这可能会给 Symfony 带来混乱,但它是可控的。在 SonataAdmin 上,您必须使用您的自定义类型。