Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/235.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/fortran/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 使用EasyExtends时,方法签名显然不匹配_Php_Symfony_Sonata Admin - Fatal编程技术网

Php 使用EasyExtends时,方法签名显然不匹配

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

我正在从事一个预先存在的项目,该项目使用EasyExtends扩展Sonata的页面包。该项目基于Symfony 3.3

此项目中已存在命名空间
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用户,所以我不知道这是你写的东西,还是第三方代码,或者你有什么。谢谢你的评论。删除类型提示后,我对问题进行了轻微编辑。
将一个警告替换为另一个警告
这是同一个问题,您不能仅删除类型提示,它们必须与父类或接口的提示中的类相同。