Sonata管理员基于ORM的管理员基于ODM的子管理员

时间:2015-10-02 13:26:47

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

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

除此之外,父管理员是一个实体,孩子是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”) 因为它抛出了一个错误“undefined index:parent”

我现在遇到的错误如下:

  

班级不存在

堆栈跟踪:

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

     

在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',true)   在vendor / symfony / symfony / src / Symfony / Component / Form / Form.php第577行

     

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

     

表格 - >提交(数组('_ sort_order'=>'ASC','_ sort_by'=>对象(FieldDescription),'_ page'=>'1','_ per_page'=>' 25','loan'=>数组('value'=>'1')))   在vendor / sonata-project / 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()    at 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行

     

at Kernel - > handle(object(Request))   在web / app_dev.php第28行

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

有人有同样的问题吗?或成功做出类似的工作?

谢谢。

1 个答案:

答案 0 :(得分:0)

我不知道你的管理类看起来如何,但是当我让一个mapper(例如** list )猜测服务类型时,我得到 Undefined index **消息。

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

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

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