配置子管理员时的 Sonata Bundle 错误

Posted

技术标签:

【中文标题】配置子管理员时的 Sonata Bundle 错误【英文标题】:Sonata Bundle Error when configuring child admin 【发布时间】:2015-02-27 08:50:24 【问题描述】:

我正在使用 Symfony 和 Sonata Bundle 来生成我的管理界面。我有 3 节课:

餐厅 服务 餐厅服务

类 Restaurant 和 Service 与 RestaurantService 有 OneToMany 关系。

我尝试RestaurantService 作为餐厅的儿童管理员,但我遇到了这些错误:

RestaurantAdmin.php 第 143 行中的 ContextErrorException:

运行时通知:声明 GSG\AdminBundle\Admin\RestaurantAdmin::configureSideMenu() 应该是 兼容 Sonata\AdminBundle\Admin\Admin::configureSideMenu(Knp\Menu\ItemInterface $menu, $action, Sonata\AdminBundle\Admin\AdminInterface $childAdmin = 空)

classes.php 第 13757 行中的 FileLoaderLoadException:

运行时通知:声明 GSG\AdminBundle\Admin\RestaurantAdmin::configureSideMenu() 应该是 兼容 Sonata\AdminBundle\Admin\Admin::configureSideMenu(Knp\Menu\ItemInterface $menu, $action, Sonata\AdminBundle\Admin\AdminInterface $childAdmin = NULL) 在 /Volumes/Data/ge0ra/www/admin_gsg/app/config/ 中。 (这是 进口自 “/Volumes/Data/ge0ra/www/admin_gsg/app/config/routing.yml”)。

这是我的services.yml 文件:

services:
   sonata.admin.restaurant:
      class: GSG\AdminBundle\Admin\RestaurantAdmin
      tags:
        -  name: sonata.admin, manager_type: orm, group: "Gestion des restaurants", label: "Restaurants" 
      arguments:
            - ~
            - GSG\AdminBundle\Entity\Restaurant
            - ~
      calls:
            - [ addChild, [@sonata.admin.restaurantservice]]
   sonata.admin.service:
      class: GSG\AdminBundle\Admin\ServiceAdmin
      tags:
        -  name: sonata.admin, manager_type: orm, group: "Gestion des restaurants", label: "Services" 
      arguments:
            - ~
            - GSG\AdminBundle\Entity\Service
            - ~
   sonata.admin.restaurantservice:
      class: GSG\AdminBundle\Admin\RestaurantServiceAdmin
      tags:
        -  name: sonata.admin, manager_type: orm, group: "Gestion des restaurants", label: "RestaurantServices" 
      arguments:
            - ~
            - GSG\AdminBundle\Entity\RestaurantService
            - ~

在我的RestaurantAdmin 班级:

protected function configureSideMenu(MenuItemInterface $menu, $action, AdminInterface $childAdmin = null)
    
        if (!$childAdmin && !in_array($action, array('edit'))) 
            return;
        
 
        $admin = $this->isChild() ? $this->getParent() : $this;
 
        $id = $admin->getRequest()->get('id');
 
        $menu->addChild(
            'Voir/Editer',
            array('uri' => $admin->generateUrl('edit', array('id' => $id)))
        );
 
        $menu->addChild(
            'Services',
            array('uri' => $admin->generateUrl('sonata.admin.restaurantservice.list', array('id' => $id)))
        );
    

还有我的RestaurantServiceAdmin 班级:

class RestaurantServiceAdmin extends Admin

    protected $parentAssociationMapping = 'Restaurant';

    // Fields to be shown on create/edit forms
    protected function configureFormFields(FormMapper $formMapper)
    
        $formMapper
            ->add('service', 'sonata_type_model')
        ;
    

    // Fields to be shown on filter forms
    protected function configureDatagridFilters(DatagridMapper $datagridMapper)
    
        
    

    // Fields to be shown on lists
    protected function configureListFields(ListMapper $listMapper)
    
        if (!$this->isChild())
            $listMapper->addIdentifier('id')->addIdentifier('Restaurant');

        $listMapper
            ->add('service', 'sonata_type_model')
        ;
    

有人知道这些错误可能来自哪里吗?

谢谢!

【问题讨论】:

【参考方案1】:

您的RestaurantAdmin 类将configureSideMenu 的第一个参数设置为MenuItemInterface $menu,而它应该是\Knp\Menu\ItemInterface 的实例。

类型提示的Menu 部分错误。

【讨论】:

我忘了说我在页面顶部有这一行:use Knp\Menu\ItemInterface as MenuItemInterface; 您能否更新您的代码并添加每个使用声明?该错误告诉您使用相同的类型提示。不仅 ItemInterface 可能会丢失,而且 AdminInterface 也会丢失。

以上是关于配置子管理员时的 Sonata Bundle 错误的主要内容,如果未能解决你的问题,请参考以下文章

Sonata 产品列表错误(Sonata E-Commerce Bundle)

使用 MongoDB 配置 Sonata Media Bundle 的问题

如何在 Sonata Admin Bundle 中配置日期范围过滤器?

Sonata Bundle 之间的依赖关系

Sonata Media Bundle 安装错误

Symfony 4 + Sonata + Sonata Doctrine ORM Admin Bundle:错误:没有要处理的元数据类