如何修复“当前字段`等价物`没有链接到管理员。请为目标实体创建一个:``”

时间:2018-02-12 08:42:48

标签: php symfony sonata-admin symfony-2.8

我正在修改使用几个Sonata捆绑包的Symfony 2.8应用程序。

我有两个实体:一个旧的Page实体和一个新的Equivalent实体(反过来,它包含两个字段)。每个页面可以引用多个等价物,每个等价物可以被多个页面引用,因此我设置了多对多映射。

我使用sonata:admin:generate为我的Equivalent类生成了一个管理类,所以我现在在admin.yml文件的底部有以下内容:

app.admin.equivalent:
    class: AppBundle\Admin\EquivalentAdmin
    arguments: [~, AppBundle\Entity\Equivalent, AppBundle:EquivalentAdmin]
    tags:
        - { name: sonata.admin, manager_type: orm, group: admin, label: Equivalent }

直接编辑等效实体效果很好。现在,我想在PageAdmin屏幕中添加等效实体的内联编辑。

考虑到这一目标,我将以下内容添加到PageAdmin.php:

            ->add('equivalents', 'sonata_type_collection', array(
                'label' => "Equivalents",
                'cascade_validation' => true,
                'required' => false
            ), array(
                'edit' => 'inline',
                'inline' => 'table',
                'targetEntity' => 'AppBundle\Entity\Equivalent',
            ))

所以我的问题是:

为什么我会收到一条消息 The current field等效is not linked to an admin. Please create one for the target entity : "" ?我该怎么做才能让应用程序识别出它有可用的管理类?

(我在这类问题中看到的大多数解决方案都强调将新实体的管理类注册为服务,但似乎我的管理生成命令已经这样做了。我猜测还有一两行我我错过了某个地方,并且我的问题会有一个简单的解决方案。)

1 个答案:

答案 0 :(得分:0)

这并没有完全解决问题,但它有所帮助:我在add()语句中添加了一个真正的'by_reference'值。所以它现在看起来像:

            ->add('equivalents', 'sonata_type_collection', array(
                'label' => "Equivalents",
                'by_reference' => true, 
                'cascade_validation' => true,
                'required' => false,
            ), array(
                'edit' => 'inline',
                'inline' => 'table',
                'targetEntity' => 'AppBundle\Entity\Equivalent',
            ))

(这使我能够继续解决更有用的错误。)

====

编辑:还值得一提的是,在第二个数组中添加'admin_code' => 'app.admin.equivalent'值会在几天后在类似情况下有所帮助。