扩展 FOSUB UserManager 时的抽象方法问题

abstract methods problems when extending FOSUB UserManager

我正在尝试根据他们的 documentation 扩展 FOSUB UserManger 我创建了一个服务 (app/config/services.yml):

services:
my_custom_user_manager:
    class: UserBundle\Repository\CustomUserManager
    arguments: []

修改配置(app/config/config.yml):

fos_user:
service:
    user_manager: my_custom_user_manager

并创建了 class :

    <?php

namespace UserBundle\Repository;

use Doctrine\ORM\EntityRepository;
use FOS\UserBundle\Model\UserManager;
use FOS\UserBundle\Model\UserManagerInterface;

class CustomUserManager extends UserManager implements UserManagerInterface
{

    public function loadUserByUsername($username)
    {

        return $this->createQueryBuilder('u')
            ->where('u.username = :username OR u.email = :email')
            ->setParameter('username', $username)
            ->setParameter('email', $username)
            ->join('u.roleues','r')
            ->addSelect('r')
            ->join('r.etablissement','e')
            ->addSelect('e')
            ->getQuery()
            ->getOneOrNullResult();

    }


}

但是我得到这个错误:

Error: Class UserBundle\Repository\CustomUserManager contains 5 abstract methods and must therefore be declared abstract or implement the remaining methods (FOS\UserBundle\Model\UserManagerInterface::deleteUser, FOS\UserBundle\Model\UserManagerInterface::findUsers, FOS\UserBundle\Model\UserManagerInterface::getClass, ...)

但是当我阅读 Usermanager class 和 UserManagerInterface 时,我看不到任何抽象方法,当我阅读类似主题时,他们毫无问题地扩展了这个 class .

接口没有抽象方法。它只是声明您需要在 class 中实现的方法。

由于 FOS\UserBundle\Model\UserManager 未实现错误消息中列出的方法,因此您必须在 UserBundle\Repository\CustomUserManager 上实现它们。

此外,如果您扩展 FOS\UserBundle\Model\UserManager,则不必实施 FOS\UserBundle\Model\UserManagerInterface,因为 FOS\UserBundle\Model\UserManager 已经实施了它。

为了更好地理解,我建议您阅读一些有关 OOP 中继承的文档。你可以找到一些关于它的 PHP 文档:Object Inheritance, Interfaces and Abstract classes.