Symfony / Sonata Admin:编辑表单上的列表表单

Symfony / Sonata Admin: List form on Edit form

我设置了一个(类别)对多(产品)的关系,我希望在编辑类别页面的底部显示一个产品列表。

这似乎是一件很常见的事情,但我还没有找到任何方法(或任何例子)。我已经设法让产品使用 sonata_type_collection 显示,但这给了我一个完整的产品编辑表单,而我真的只想要一个与该类别相关的产品列表。

这里有两个问题,真的:

这可能吗?

是否气馁(这可以解释缺少示例)?如果是,为什么?

在您最初的问题中,您谈论的是类别的 edit 模板。在您的评论中,您希望列表出现在 show 操作中。 后者很容易。只要您将关系添加到您的 showFields 操作,它们就会显示:

use Sonata\AdminBundle\Show\ShowMapper;

class CategoryAdmin extends Admin
{
    protected function configureShowFields(ShowMapper $showMapper)
    {
        $showMapper
            ->add('products')
        ;    
    }
}

如果您不喜欢外观,可以创建自定义模板。这将适用于 showedithttps://sonata-project.org/bundles/admin/master/doc/reference/action_show.html#setting-up-a-custom-show-template-very-useful

完成您正在寻找的事情的最快方法是覆盖编辑模板。在您的管理员服务声明中,您可以这样做:

services:
    sonata.admin.mail:
        class: %sonata.admin.category.class%
        tags:
            - { name: sonata.admin, manager_type: orm, group: "Categories", label: "Category" }
        arguments:
            - ~
            - %skooli.category.class%
            - ~
        calls:
            - [ setTemplate, ["edit", "AcmeAdminBundle:CategoryAdmin:edit.html.twig"] ]

然后,在AcmeBundle/Resources/views/CategoryAdmin/edit.html.twig下你可以有这样的东西:

{% extends 'SonataAdminBundle:CRUD:base_edit.html.twig' %}
{# Override any block from the parent view if necessary #}
{% block products %}
    <ul>
    {% for product in object.products%}
        <li>{{ product.name }}</li>
    {% endfor %}
    </ul>
{% endblock products %}