Sonata admin 基于 ODM 的子管理员在基于 ORM 的管理员上

Posted

技术标签:

【中文标题】Sonata admin 基于 ODM 的子管理员在基于 ORM 的管理员上【英文标题】:Sonata admin ODM based child admin on an ORM based admin 【发布时间】:2015-12-30 17:26:57 【问题描述】:

我总是按照此处找到的流程在奏鸣曲中配置子管理员: Sonata/symfony - parent/child structure setup

除了这一次,父admin是一个实体,child是一个mongodb文档。

/**
 * Class Child
 * @ODM\Document(collection="childs")
 */
class Child

    /**
     * @ODM\Id(strategy="INCREMENT")
     * @var int
     */
    protected $id;

    /**
     * @var parent
     * @ODM\Field(type="string", name="parent")
     * @Gedmo\ReferenceOne(type="entity", class="AppBundle\Entity\Parent",
     *          inversedBy="childs", identifier="parent_id", )
     */
    protected $parent;

[getters & setters]



/**
 * Parent
 *
 * @ORM\Table(name="parent")
 */
class Parent

    /**
     * @var integer
     *
     * @ORM\Column(name="id", type="integer")
     * @ORM\Id
     * @ORM\GeneratedValue(strategy="AUTO")
     */
    private $id;

    /**
     * @var ArrayCollection
     * @Gedmo\ReferenceMany(type="document", class="AppBundle\Document\Child", mappedBy="parent")
     */
    private $childs;

[getters + setters]

现在我添加了这一行 * @ODM\Field(type="string", name="parent") 因为它抛出错误“未定义的索引:父”

我现在遇到的错误如下:

类不存在

堆栈跟踪:

在 vendor/doctrine/common/lib/Doctrine/Common/Persistence/AbstractManagerRegistry.php 第 196 行

在 ReflectionClass ->__construct ('') 在 vendor/doctrine/common/lib/Doctrine/Common/Persistence/AbstractManagerRegistry.php 第 196 行

在 AbstractManagerRegistry ->getManagerForClass (null) 在 vendor/sonata-project/doctrine-mongodb-admin-bundle/Sonata/DoctrineMongoDBAdminBundle/Model/ModelManager.php 第 207 行

在 ModelManager ->getDocumentManager (null) 在 vendor/sonata-project/doctrine-mongodb-admin-bundle/Sonata/DoctrineMongoDBAdminBundle/Model/ModelManager.php 第 164 行

在 ModelManager ->find (null, '1') 在 vendor/sonata-project/admin-bundle/Form/DataTransformer/ModelToIdTransformer.php 第 45 行

在 ModelToIdTransformer ->reverseTransform ('1') 在 vendor/symfony/symfony/src/Symfony/Component/Form/Form.php 第 1192 行

在表格 ->viewToNorm ('1') 在 vendor/symfony/symfony/src/Symfony/Component/Form/Form.php 第 637 行

在表格->提交('1',真) 在 vendor/symfony/symfony/src/Symfony/Component/Form/Form.php 第 577 行

在表单 -> 提交 (array('value' => '1'), true) 在 vendor/symfony/symfony/src/Symfony/Component/Form/Form.php 第 577 行

在表单 -> 提交 (array('_sort_order' => 'ASC', '_sort_by' => object(FieldDescription), '_page' => '1', '_per_page' => '25', 'loan ' => 数组('值' => '1'))) 在第 110 行的 vendor/sonata-project/admin-bundle/Datagrid/Datagrid.php 中

在Datagrid->buildPager() 在第 265 行的 vendor/sonata-project/admin-bundle/Datagrid/Datagrid.php 中

在 Datagrid ->getForm() 在第 210 行的 vendor/sonata-project/admin-bundle/Controller/CRUDController.php 中

在 CRUDController ->listAction () 在 call_user_func_array (array(object(CRUDController), 'listAction'), array()) 在 app/bootstrap.php.cache 第 3109 行

在 HttpKernel ->handleRaw (object(Request), '1') 在 app/bootstrap.php.cache 第 3071 行

在 HttpKernel ->handle (object(Request), '1', true) 在 app/bootstrap.php.cache 第 3222 行

在 ContainerAwareHttpKernel ->handle (object(Request), '1', true) 在 app/bootstrap.php.cache 第 2444 行

在内核->句柄(对象(请求)) 在 web/app_dev.php 第 28 行

如果我进入 ModelToIdTransformer.php 并手动设置类名,一切正常。但是我找不到上游配置它的方法。

有人遇到过同样的问题吗?还是成功地完成了这样的工作?

谢谢。

【问题讨论】:

【参考方案1】:

我不知道您的管理类看起来如何,但通常当我让映射器(例如 **list)猜测服务类型时,我会收到 Undefined index ** 消息。

这就是为什么我在我的 $listMapper 中明确定义它作为第二个参数:

$listMapper->add('site', 'entity');

也许这已经解决了您最初的问题。

【讨论】:

PS.:我目前正在测试很多混合 ORM 和 ODM 的管理内容,并且缺乏教程。有任何博客或 Twitter / GitHub 帐户可以与您联系 @user2179876 吗?

以上是关于Sonata admin 基于 ODM 的子管理员在基于 ORM 的管理员上的主要内容,如果未能解决你的问题,请参考以下文章

未生成子管理员路由 - Sonata Admin Bundle

Sonata 管理包:无法删除与 sonata_type_admin 的关系

Symfony 3 Sonata Admin 使用注释创建管理员

Symfony - Sonata-Admin 菜单组翻译

Symfony - Sonata “在管理池中找不到管理服务“app.admin.post”。”

服务“admin.category”依赖于不存在的服务“sonata.admin.manager.orm”