Php 使用EasyExtends时,方法签名显然不匹配
我正在从事一个预先存在的项目,该项目使用EasyExtends扩展Sonata的页面包。该项目基于Symfony 3.3 此项目中已存在命名空间Php 使用EasyExtends时,方法签名显然不匹配,php,symfony,sonata-admin,Php,Symfony,Sonata Admin,我正在从事一个预先存在的项目,该项目使用EasyExtends扩展Sonata的页面包。该项目基于Symfony 3.3 此项目中已存在命名空间Application\Sonata\PageBundle\Admin中名为PageAdmin扩展BasePageAdmin的类。它包含两个定义函数--getPageTypes和configureFormFields 当我试图将函数configureTabMenu从该类的供应商副本克隆到应用程序副本时,我收到了应用程序的以下投诉: 警告:声明 Appli
Application\Sonata\PageBundle\Admin
中名为PageAdmin
扩展BasePageAdmin的类。
它包含两个定义函数--getPageTypes
和configureFormFields
当我试图将函数configureTabMenu
从该类的供应商副本克隆到应用程序副本时,我收到了应用程序的以下投诉:
警告:声明
Application\Sonata\PageBundle\Admin\PageAdmin::configureTabMenu(Application\Sonata\PageBundle\Admin\MenuItemInterface
$menu、$action、?应用程序\Sonata\PageBundle\Admin\AdminInterface
$childAdmin=NULL)应与兼容
Sonata\PageBundle\Admin\PageAdmin::configureTabMenu(Knp\Menu\ItemInterface
$menu,$action,?Sonata\AdminBundle\Admin\AdminInterface$childAdmin=
空)在。(从中国进口)
“/usr/src/app/app/config/routing.yml”)。确保有一个加载器
支持“sonata_admin”类型
坦率地说,这比我容易理解的要多一些是否有一种简单的方法可以覆盖“我的供应商”文件夹中现有的configureFormFields()方法?
====
编辑#1:删除类型暗示(作为一种长期策略,这是不明智的,但对调试很有用)将一个警告替换为另一个警告。然后,我得到以下警告文本:
警告:声明
Application\Sonata\PageBundle\Admin\PageAdmin::configureTabMenu($menu,
$action,$childAdmin=NULL)应与兼容
Sonata\PageBundle\Admin\PageAdmin::configureTabMenu(Knp\Menu\ItemInterface
$menu,$action,?Sonata\AdminBundle\Admin\AdminInterface$childAdmin=
空)在。(从中国进口)
“/usr/src/app/app/config/routing.yml”)。确保有一个加载器
支持“sonata_admin”类型
====
编辑#2:将方法签名更改为Knp\Menu\ItemInterface$Menu$action,Sonata\AdminBundle\Admin\AdminInterface$childAdmin=NULL
会给出以下结果:
警告:声明
Application\Sonata\PageBundle\Admin\PageAdmin::configureTabMenu(Application\Sonata\PageBundle\Admin\Knp\Menu\ItemInterface
$menu,$action,
?应用程序\Sonata\PageBundle\Admin\Sonata\AdminBundle\Admin\AdminInterface
$childAdmin=NULL)应与兼容
Sonata\PageBundle\Admin\PageAdmin::configureTabMenu(Knp\Menu\ItemInterface
$menu,$action,?Sonata\AdminBundle\Admin\AdminInterface$childAdmin=
空)在。(从中国进口)
“/usr/src/app/app/config/routing.yml”)。确保有一个加载器
支持“sonata_admin”类型
让我们让它更具可读性 警告:声明 Application\Sonata\PageBundle\Admin\PageAdmin::configureTabMenu(Application\Sonata\PageBundle\Admin\MenuItemInterface$菜单,$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。结果是我缺少两条
use
语句。我从我克隆的类中复制了这些:
use Sonata\AdminBundle\Admin\AdminInterface;
use Knp\Menu\ItemInterface as MenuItemInterface;
。。。而且一切都正常。您得到了这个错误,因为参数的类类型提示使用了错误的类。我不是symfony用户,所以我不知道这是你写的东西,还是第三方代码,或者你有什么。谢谢你的评论。删除类型提示后,我对问题进行了轻微编辑。
将一个警告替换为另一个警告
这是同一个问题,您不能仅删除类型提示,它们必须与父类或接口的提示中的类相同。