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 使用注释创建管理员