自定义 Class 和 ContextErrorException 中没有实体管理器

No Entity Manager in Custom Class and ContextErrorException

我正在尝试在 Sonata-Admin 中创建自定义表单,我想将数据从数据库获取到选择框。 当我尝试通过 getEntityManager() 获取数据时出现错误

No entity manager defined for class \Admin\AdminBundle\Entity\Category

我试图将实体管理器添加到 service.yml [下面的代码]

中的第一个参数
services:
  sonata.admin.category:
    class: Admin\AdminBundle\Admin\Category
    tags:
        - {name: sonata.admin, manager_type: orm, group: "Content", label: "Kategoria"}
    arguments:
        - @doctrine.orm.default_entity_manager
        - Admin\AdminBundle\Entity\Category
        - ~
    calls:
        - [ setTranslationDomain, [AdminAdminBundle]]

添加默认实体管理器后出现错误:

ContextErrorException in RoutesCache.php line 47:
Warning: md5() expects parameter 1 to be string, object given

我还添加了 ConfigureFormFields() 函数:

protected function configureFormFields(FormMapper $formMapper){

$em = $this->modelManager->getEntityManager('\Admin\AdminBundle\Entity\Category');

$query = $em->createQueryBuilder('c')
    ->select('c')
    ->from('AdminBundle:Category', 'c')
    ->where('c.parent IS NOT NULL')
    ->orderBy('c.root, c.lft', 'ASC');


$formMapper
    ->add ('name', 'text', array('label' => 'Nazwa Kategorii'))
    ->add ('alias', 'text', array('label' => 'Alias'))
    ->add('parent_id', 'sonata_type_model', array(
        'required' => true,
        'query' => $query
    ));

有人可以帮我解决这个错误吗? 感谢您的回答,

此致!

您收到错误消息,因为在错误的位置添加了经理。 管理服务的第一个参数应设置为 管理服务的代码(默认为服务的名称)。

A​​dmin class 解析此字符串并基于此构建一些逻辑。你把经理放在那里所以你会出错。

如果你想向你的管理员添加一些东西 class 你可以简单地添加第四个参数(或第五个,第六个......),例如:

 services:
   sonata.admin.category:
    class: Admin\AdminBundle\Admin\Category
    tags:
         - {name: sonata.admin, manager_type: orm, group: "Content", label: "Kategoria"}
     arguments:
         - ~ 
         - Admin\AdminBundle\Entity\Category
         - ~
         - @doctrine.orm.default_entity_manager
calls:
    - [ setTranslationDomain, [AdminAdminBundle]]

然后在您的管理员中 class 您必须更新覆盖构造函数,例如:

 public function __construct($code, $class, $baseControllerName, $yourManager)
 {
     parent::_construct($code, $class, $baseControllerName);
     $this->yourManager = $yourManager
 }