奏鸣曲管理员:在编辑页面中列出一对多

时间:2017-06-26 14:45:50

标签: php symfony sonata-admin

我在奏鸣曲中有很多很多关系(确切地说是两对多关系),品牌和零售商。 在品牌管理编辑页面中,我想将所有零售商显示为列表(因此只是一个只读版本),而不是正常编辑(此时,在此品牌编辑页面上,我可以管理此关系)品牌和零售商 - 添加一个新的,删除现有的。)

到目前为止,我尝试探索两条路线:

  1. 编辑页面将加载自定义树枝
  2. 仅为此字段使用自定义字段类型
  3. 我的问题是,有了两个选项,我都无法找到解决方案 所以这就是我所做的:

    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
    • 使用ListType中的configureFormFields

      use XX\BrandBundle\Form\Type\ListType; ... ->add('retailers', 'ListType');

    但我收到错误XX\BrandBundle\Form\Type\ListType

    所以基本上,因为我无法让它工作,这两个选项中的任何一个都可以很好地解决我的问题吗? 如果是这样,有人可以请问我在那里错过了什么? 任何帮助将非常感谢:)

1 个答案:

答案 0 :(得分:1)

您可以使用sonata_type_model_listhttps://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,           
        ));

    }
}