我建立了一个(类别)对多(产品)的关系,我希望在编辑类别页面的底部显示一个产品列表。
这似乎是一件很常见的事情,但我还没有找到任何方法(或任何例子)。我已经设法使用 sonata_type_collection 显示产品,但是当我真的只想要与该类别相关的产品列表时,这给了我一个完整的产品编辑表单。
这里有两个问题,真的:
这可能吗?
是否气馁(这可以解释缺乏示例)?如果是这样,为什么?
我建立了一个(类别)对多(产品)的关系,我希望在编辑类别页面的底部显示一个产品列表。
这似乎是一件很常见的事情,但我还没有找到任何方法(或任何例子)。我已经设法使用 sonata_type_collection 显示产品,但是当我真的只想要与该类别相关的产品列表时,这给了我一个完整的产品编辑表单。
这里有两个问题,真的:
这可能吗?
是否气馁(这可以解释缺乏示例)?如果是这样,为什么?
完成您正在寻找的最快的方法是覆盖编辑模板。在您的管理员服务声明中,您可以这样做:
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 %}
在您最初的问题中,您谈论的是类别的编辑模板。在您的评论中,您希望列表出现在显示操作中。后者很容易。一旦您将关系添加到 showFields 操作,它们就会显示:
use Sonata\AdminBundle\Show\ShowMapper;
class CategoryAdmin extends Admin
{
protected function configureShowFields(ShowMapper $showMapper)
{
$showMapper
->add('products')
;
}
}
如果您不喜欢外观,您可以创建自定义模板。这将适用于显示和编辑: https ://sonata-project.org/bundles/admin/master/doc/reference/action_show.html#setting-up-a-custom-show-template-very-useful