我设置了一个(类别)到多个(产品)关系,我希望在编辑类别页面的底部显示一个产品列表。
这似乎是常见的事情,但我没有找到任何办法(或其任何例子)。我已经设法使用sonata_type_collection来显示产品,但这给了我一个产品的整个编辑表单,当我真的只想要一个与该类别相关的产品列表时。
这里有两个问题,真的:
这可能吗?
是否气馁(这可以解释缺乏例子)?如果是这样,为什么?
答案 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