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

时间:2015-06-19 20:01:16

标签: php symfony sonata-admin symfony-sonata sonata

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

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

这里有两个问题,真的:

这可能吗?

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

2 个答案:

答案 0 :(得分:1)

执行所需操作的最快方法是覆盖编辑模板。在您的admin serivce声明中,您可以这样做:

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 %}

答案 1 :(得分:0)

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

use Sonata\AdminBundle\Show\ShowMapper;

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

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