Sonata管理员基于ODM的儿童管理员基于ORM的管理员


Sonata admin ODM based child admin on an ORM based admin

我总是按照这里的流程在sonata中配置子管理员:Sonata/symfony-父/子结构设置

除此之外,父admin是一个实体,子admin是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"(因为它抛出了一个错误"未定义的索引:父">

我现在的错误如下:

类不存在

带有堆栈跟踪:

在供应商/条令/通用/lib/条令/通用/持久性/AbstractManagerRegistry.php中,第196行

在ReflectionClass->__construct(''(在供应商/条令/通用/lib/条令/通用/持久性/AbstractManagerRegistry.php中,第196行

在AbstractManagerRegistry->getManagerForClass(null(在供应商/sonata项目/条令mongodb管理捆绑包/sonata/DoctrineMongoDBAdminBundle/Model/ModelManager.php中,第207行

在ModelManager->getDocumentManager(null(在供应商/sonata项目/条令mongodb管理捆绑包/sonata/DoctrineMongoDBAdminBundle/Model/ModelManager.php中,第164行

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

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

在Form->viewToNorm('1'(vendor/symfony/symfoy/src/symfony/Component/Form/Form.php中,第637行

在表格->提交('1',true(在vendor/symfony/symfoy/src/symfony/Component/Form/Form.php中,位于第577行

在Form->submit(数组('value'=>'1'(,true(在vendor/symfony/symfoy/src/symfony/Component/Form/Form.php中,位于第577行

在表单->提交(数组('_sort_order'=>'ASC','_sort_by'=>对象(字段描述(,'_page'=>'1','_per_page'=>'25','loan'=>数组('value'=>'1'((在供应商/sonata项目/admin bundle/Datagrid/Datagrid.php中,位于第110行

在Datagrid->buildPager((在vendor/sonata project/admin bundle/Datagrid/Datagrid.php中,位于第265行

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

在CRUDController->listAction((在call_user_func_array(array(object(CRUDController(,'listAction'(,array(((应用程序内/bootstrap.hp.cache,电话:3109

在HttpKernel->handleRaw(对象(请求(,"1"(应用程序内/bootstrap.hp.cache,第3071行

在HttpKernel->句柄(object(Request(,'1',true(在应用程序内/bootstrap.hp.cache的第3222行

在ContainerwareHttpKernel->句柄(对象(请求(,"1",true(应用程序内/bootstrap.hp.cache,第2444行

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

如果我进入ModelToIdTransformer.php并手动设置类名,一切都会成功。但我找不到在上游配置它的方法。

有人有同样的问题吗?或者成功地制作了这样的作品?

谢谢。

我不知道你的管理类看起来怎么样,但通常当我让映射器(例如**list(猜测服务类型时,我会得到未定义索引**消息。

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

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

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