使用EasyExtends

时间:2018-04-12 14:44:49

标签: php symfony sonata-admin

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

此项目中已存在名为Application\Sonata\PageBundle\Admin的名称空间PageAdmin中的一个类BasePageAdmin.,其中包含定义两个函数 - getPageTypesconfigureFormFields。< / 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”类型。

2 个答案:

答案 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;

......一切正常。