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

时间:2016-10-16 07:57:44

标签: php symfony fosuserbundle

我试图根据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

创建了这个类:

    <?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类和UserManagerInterface时,我看不到任何absract方法,当我阅读类似的主题时,他们会毫不费力地扩展这个类。

1 个答案:

答案 0 :(得分:0)

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

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

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

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