Sonata admin:在编辑页面中列出一对多
Sonata admin: list one to many in edit page
我在 Sonata 中有一个多对多的关系(确切地说是两个一对多的关系),Brand 和 Retailer。
在品牌管理编辑页面中,我想将所有零售商显示为列表(所以只是一个只读版本),而不是进行正常编辑(目前,在这个品牌编辑页面上,我可以管理这之间的关系品牌和零售商 - 添加一个新的,删除一个现有的)。
到目前为止,我尝试探索了两条路线:
- 编辑页面将加载自定义树枝
- 仅为该字段使用自定义字段类型
我的问题是,对于这两种选择,我都没有找到解决方案
所以这就是我所做的:
1 - 加载自定义编辑树枝:
services:
xx_brand.admin.brand_brand:
calls:
- [ setTemplate, [edit, xxBrandBundle:Admin:base_edit.html.twig]]
在这种情况下,base_edit 是奏鸣曲 base_edit
的精确副本,但它加载了我的自定义 base_edit_form
:
{% use 'xxBrandBundle:Admin:base_edit_form.html.twig' with form as parentForm %}
从这里我可以排除 retailers
的默认渲染,但无法找到一种方法来渲染它,因为我不确定 retailers
实体是怎样的在这里管理:
{% if admin.formfielddescriptions[field_name] is defined and field_name != 'retailers' %}
{{ form_row(form[field_name])}}
{% else %}
<ul>
<li>retailer1</li>
<li>retailer2</li>
</ul>
{% endif %}
2 - 对于自定义字段类型的方法,我尝试遵循 documentation
- 正在创建
Bundle/Form/Type/ListType.php
- 正在创建
/BrandBundle/Resources/views/form/list.html.twig
使用 configureFormFields
中的 ListType
:
use XX\BrandBundle\Form\Type\ListType;
...
->add('retailers', 'ListType');
但是我得到一个错误XX\BrandBundle\Form\Type\ListType
所以基本上,因为我无法让它工作,这两个选项中的任何一个都可以很好地解决我的问题吗?
如果是这样,有人可以就我在那里缺少的东西提出建议吗?
非常感谢任何帮助:)
您可以使用sonata_type_model_list
:https://sonata-project.org/bundles/doctrine-orm-admin/master/doc/reference/form_field_definition.html#example
像这样:
class BrandAdmin extends Admin
{
protected function configureFormFields(FormMapper $formMapper)
{
$formMapper
->add('retailer', 'sonata_type_model_list', array(
'btn_add' => false,
'btn_delete' => false,
));
}
}
我在 Sonata 中有一个多对多的关系(确切地说是两个一对多的关系),Brand 和 Retailer。 在品牌管理编辑页面中,我想将所有零售商显示为列表(所以只是一个只读版本),而不是进行正常编辑(目前,在这个品牌编辑页面上,我可以管理这之间的关系品牌和零售商 - 添加一个新的,删除一个现有的)。
到目前为止,我尝试探索了两条路线:
- 编辑页面将加载自定义树枝
- 仅为该字段使用自定义字段类型
我的问题是,对于这两种选择,我都没有找到解决方案 所以这就是我所做的:
1 - 加载自定义编辑树枝:
services:
xx_brand.admin.brand_brand:
calls:
- [ setTemplate, [edit, xxBrandBundle:Admin:base_edit.html.twig]]
在这种情况下,base_edit 是奏鸣曲 base_edit
的精确副本,但它加载了我的自定义 base_edit_form
:
{% use 'xxBrandBundle:Admin:base_edit_form.html.twig' with form as parentForm %}
从这里我可以排除 retailers
的默认渲染,但无法找到一种方法来渲染它,因为我不确定 retailers
实体是怎样的在这里管理:
{% if admin.formfielddescriptions[field_name] is defined and field_name != 'retailers' %}
{{ form_row(form[field_name])}}
{% else %}
<ul>
<li>retailer1</li>
<li>retailer2</li>
</ul>
{% endif %}
2 - 对于自定义字段类型的方法,我尝试遵循 documentation
- 正在创建
Bundle/Form/Type/ListType.php
- 正在创建
/BrandBundle/Resources/views/form/list.html.twig
使用
configureFormFields
中的ListType
:use XX\BrandBundle\Form\Type\ListType; ... ->add('retailers', 'ListType');
但是我得到一个错误XX\BrandBundle\Form\Type\ListType
所以基本上,因为我无法让它工作,这两个选项中的任何一个都可以很好地解决我的问题吗? 如果是这样,有人可以就我在那里缺少的东西提出建议吗? 非常感谢任何帮助:)
您可以使用sonata_type_model_list
:https://sonata-project.org/bundles/doctrine-orm-admin/master/doc/reference/form_field_definition.html#example
像这样:
class BrandAdmin extends Admin
{
protected function configureFormFields(FormMapper $formMapper)
{
$formMapper
->add('retailer', 'sonata_type_model_list', array(
'btn_add' => false,
'btn_delete' => false,
));
}
}