【问题标题】:Sonata/symfony - parent/child structure setupSonata/symfony - 父/子结构设置
【发布时间】:2014-12-31 22:55:19
【问题描述】:

我要求这个已经有一段时间了。不敢相信没有一个开发者不知道答案,我有点绝望

在 Sonata 中,我无法使 url 结构/模式 /parent/ID/child/list 工作。通过非常,相当差的,4.6。奏鸣曲文档中的 CREATE CHILD ADMINS 部分,仅在网上找到了几个示例,我无法使其工作

有人可以逐步解释如何设置这样的结构吗?

【问题讨论】:

    标签: symfony admin parent-child


    【解决方案1】:

    我将在我的解释中使用Sonata 提供的示例,一个基本的帖子/评论关系。

    您的实体 Post(父)和 Comment(子)之间必须有父/子链接(oneTomany / manyToOne 关系)。

    您必须在服务声明中添加针对子管理服务的参数 addChild:

    services.yml

    sonata.news.admin.comment:
        class: Sonata\NewsBundle\Admin\CommentAdmin
        arguments: [~, Sonata\NewsBundle\Model\Comment, SonataNewsBundle:CommentAdmin]
        tags:
            - {name: sonata.admin, manager_type: orm, group: "Content"}
    sonata.news.admin.post:
        class: Sonata\NewsBundle\Admin\PostAdmin
        arguments: [~, Sonata\NewsBundle\Model\Post, SonataNewsBundle:PostAdmin]
        tags:
            - {name: sonata.admin, manager_type: orm, group: "Content"}
        calls:
            - [addChild, ['@sonata.news.admin.comment']]
    

    在您的 CommentAdmin 类中,您需要添加 propertyAssociationMapping 以按父级过滤此子级。

    评论管理

    class CommentAdmin extends Admin
    {
        protected $parentAssociationMapping = 'post';
        ...
    }
    

    然后你将有一个新的路由可用:/parent/ID/child/list,你可以使用控制台找出你的新路由的标识符(php app/console router:debug)。如果您想在管理员中轻松访问它,我建议在父管理员列表中添加一个按钮以直接访问其子 cmets:

    创建一个模板,添加一个按钮来访问孩子的 cmets:

    post_cmets.html.twig

    <a class="btn btn-sm btn-default" href="{{ path('OUR_NEW_CHILD_ROUTE_ID', {'id': object.id }) }}">Comments</a>
    

    然后在本例中为 PostAdmin 的父 Admin 中添加按钮操作:

    邮政管理

    class PostAdmin extends Admin
    {
        protected function configureListFields(ListMapper $listMapper)
        {
            $listMapper->add('_action', 'actions', array(
                'actions' => array(
                    'show' => array(),
                    'edit' => array(),
                    'comments' => array('template' => 'PATH_TWIG')
                )
            ))
        }
    }
    

    希望您了解更多有关如何设置父/子管理员的信息。

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-11-10
    • 2018-08-25
    • 2014-10-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-17
    • 1970-01-01
    相关资源
    最近更新 更多