SonataAdminBundle configureShowFields 与嵌套实体

SonataAdminBundle configureShowFields with nested entities

对于一个使用 symfony2 和 SonataAdminBundle 的项目,我想弄清楚如何在 show 动作中嵌入完整的相关实体。

为了更详细,假设我有一个 Article 和一个 Comment。在 Article 的显示视图中,我想显示每个 Comment 具有多个属性以及对每个 Comment 的编辑和创建以向 Article 添加另一个评论。

我能够让它显示 Comment 个实体的列表,使用 ->add('comments') 向实体显示 link ,但这还不够。我需要真正嵌入实体!

有没有办法不用我们自己编写代码来做到这一点?如果手动操作是唯一的方法,那么最好的方法是什么?重写模板?

最简单的方法是为集合指定一个模板:

$showMapper->add('comments', 'collection', [
    'template' => 'YourBundle:SomePath:SubPath/show_comment_collection.html.twig',
]);

查看 SonataAdminBundle:CRUD:base_show_field.html.twig 模板以用作示例。并且,在该模板中,您可以遍历 value 变量。例如:

{% block field %}
    <ul>
    {% for comment in value %}
        <li><a href="{{ path('some_route', {'id': comment.id}) }}">
            {{ comment.id }} - {{ comment.otherProperty}}</a>
        </li>
    {% else %}
        <li>No comments</li>
    {% endfor %}
    </ul>
{% endblock %}