我试图根据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方法,当我阅读类似的主题时,他们会毫不费力地扩展这个类。
答案 0 :(得分:0)
接口没有抽象方法。它只是声明您需要在类中实现的方法。
由于FOS\UserBundle\Model\UserManager
未实现错误消息中列出的方法,因此您必须在UserBundle\Repository\CustomUserManager
上实施这些方法。
此外,如果您延长FOS\UserBundle\Model\UserManager
,则不必实施FOS\UserBundle\Model\UserManagerInterface
,因为FOS\UserBundle\Model\UserManager
已经实现了它。
为了更好地理解,我建议你阅读一些关于OOP继承的文档。您可以找到一些关于它的PHP文档:Object Inheritance,Interfaces和Abstract classes。