配置子管理员时的 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 中配置日期范围过滤器?
Symfony 4 + Sonata + Sonata Doctrine ORM Admin Bundle:错误:没有要处理的元数据类