扩展 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.
我正在尝试根据他们的 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.