如何使用sonata_type_model字段在Sonata Admin Bundle中创建子实体时正确设置引用实体属性

时间:2015-08-04 23:42:49

标签: symfony doctrine-orm sonata-admin symfony-sonata sonata

我觉得我在这里缺少一些简单的东西... TLDR:使用sonata_type_model字段,它在向父节点添加新子实体时使用模态,如何将父节点传递给子实体以将其添加到子节点实体的参考字段?

我有两个实体,“用户”和“角色”实体。

用户 - > OneToMany - >作用。

我正试图弄清楚如何从用户的Sonata Admin Bundle页面创建,编辑和删除角色。

在我的UserAdmin类中,我已经配置了表单字段,如下所示:

$formmapper->add('roles', 'sonata_type_model', array(
                'required' => false,
                'btn_delete' => true,
                'btn_list' => true,
                'multiple' => true,
                'btn_add' => true,
            ))

现有角色显示正常。如果我单击角色字段下的“添加”按钮,则会显示“模态”窗口,其中包含“角色”管理表单中的字段。我的问题是,当我保存新角色时,它没有正确引用创建它的用户。我不知道如何将父USER实体传递给子ROLE实体!这应该很简单但是。我无法在任何地方找到这个答案

1 个答案:

答案 0 :(得分:0)

我不认为这是解决此问题的预期方法,但需要在编辑用户实体时在模式窗口中打开的“角色”实体表单上设置“用户”实体是通过使用jQuery ajaxComplete()函数侦听ajax窗口打开,检查它是否是正确的,从页面URL中获取用户ID,并在隐藏的表单元素中设置该ID

jQuery(document).ready(function() {
    $(document).ajaxComplete(function (event, request, settings) {
        if (settings.url.indexOf('/your-entity-admin-path-') >= 0){
            var pathArray = window.location.pathname.split( '/' );
            $('.modal-body .box-body input[type=hidden]').val(pathArray[3]);
        }
    });
});

一个讨厌的解决方案,但有时我们只需要工作......