我正在开发一个使用EasyExtends扩展Sonata页面包的预先存在的项目。该项目基于Symfony 3.3。
此项目中已存在名为Application\Sonata\PageBundle\Admin
的名称空间PageAdmin
中的一个类BasePageAdmin.
,其中包含定义两个函数 - getPageTypes
和configureFormFields
。< / p>
当我尝试从该类的供应商副本克隆函数configureTabMenu
- 它工作正常 - 到应用程序副本时,我从应用程序收到以下投诉:
警告:声明 应用\索纳塔\ PageBundle \管理\ PageAdmin :: configureTabMenu(应用程序\奏鸣曲\ PageBundle \管理\ MenuItemInterface $ menu,$ action,?Application \ Sonata \ PageBundle \ Admin \ AdminInterface $ childAdmin = NULL)应该兼容 索纳塔\ PageBundle \管理\ PageAdmin :: configureTabMenu(KNP \菜单\ ItemInterface $ menu,$ action,?Sonata \ AdminBundle \ Admin \ AdminInterface $ childAdmin = NULL)in。 (正在从中导入 “/usr/src/app/app/config/routing.yml”)。确保有装载机 支持“sonata_admin”类型。
坦率地说,这比我容易理解的要多得多。 是否有一种简单的方法可以覆盖我的供应商文件夹中的现有configureFormFields()方法?
====
编辑#1:删除类型提示(作为长期策略是不明智的但对调试很有用)为另一个提示警告。然后我得到这个警告文字:
警告:声明 应用\索纳塔\ PageBundle \管理\ PageAdmin :: configureTabMenu($菜单, $ action,$ childAdmin = NULL)应该兼容 索纳塔\ PageBundle \管理\ PageAdmin :: configureTabMenu(KNP \菜单\ ItemInterface $ menu,$ action,?Sonata \ AdminBundle \ Admin \ AdminInterface $ childAdmin = NULL)in。 (正在从中导入 “/usr/src/app/app/config/routing.yml”)。确保有装载机 支持“sonata_admin”类型。
====
编辑#2:将方法签名更改为Knp\Menu\ItemInterface $menu, $action, Sonata\AdminBundle\Admin\AdminInterface $childAdmin = NULL
会改为:
警告:声明 应用\索纳塔\ PageBundle \管理\ PageAdmin :: configureTabMenu(应用程序\奏鸣曲\ PageBundle \管理\ KNP \菜单\ ItemInterface $ menu,$ action, ?应用程序\索纳塔\ PageBundle \管理\索纳塔\ AdminBundle \管理\ AdminInterface $ childAdmin = NULL)应该兼容 索纳塔\ PageBundle \管理\ PageAdmin :: configureTabMenu(KNP \菜单\ ItemInterface $ menu,$ action,?Sonata \ AdminBundle \ Admin \ AdminInterface $ childAdmin = NULL)in。 (正在从中导入 “/usr/src/app/app/config/routing.yml”)。确保有装载机 支持“sonata_admin”类型。
答案 0 :(得分:1)
让我们更具可读性
警告:声明
Application \ Sonata \ PageBundle \ Admin \ PageAdmin :: configureTabMenu(Application \ Sonata \ PageBundle \ Admin \ MenuItemInterface $ menu,$ action,?Application \ Sonata \ PageBundle \ Admin \ AdminInterface $ childAdmin = NULL)
应与
兼容Sonata \ PageBundle \ Admin \ PageAdmin :: configureTabMenu(Knp \ Menu \ ItemInterface $ menu,$ action,?Sonata \ AdminBundle \ Admin \ AdminInterface $ childAdmin = NULL)。
您只需要更改它,以便它们是相同的类型提示。
public function configureTabMenu(Knp\Menu\ItemInterface $menu, $action, Sonata\AdminBundle\Admin\AdminInterface $childAdmin = NULL){
}
假设这是您编写的代码,正如我所说,我不是Symphony用户,但PHP是PHP。
答案 1 :(得分:0)
原来我错过了两个use
语句。我从我克隆的课程中复制了这些:
use Sonata\AdminBundle\Admin\AdminInterface;
use Knp\Menu\ItemInterface as MenuItemInterface;
......一切正常。