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')
;
}
}
如果您不喜欢外观,可以创建自定义模板。这将适用于 show 和 edit:
https://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 %}
我设置了一个(类别)对多(产品)的关系,我希望在编辑类别页面的底部显示一个产品列表。
这似乎是一件很常见的事情,但我还没有找到任何方法(或任何例子)。我已经设法让产品使用 sonata_type_collection 显示,但这给了我一个完整的产品编辑表单,而我真的只想要一个与该类别相关的产品列表。
这里有两个问题,真的:
这可能吗?
是否气馁(这可以解释缺少示例)?如果是,为什么?
在您最初的问题中,您谈论的是类别的 edit 模板。在您的评论中,您希望列表出现在 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
完成您正在寻找的事情的最快方法是覆盖编辑模板。在您的管理员服务声明中,您可以这样做:
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 %}