2016-10-16 2 views
0
난에 자신의 documentation 내가 서비스를 만들어 (응용 프로그램/설정/services.yml)에 따라 FOSUB UserManger을 확장하려고 해요

:추상 메소드 문제

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

수정 된 설정을 (응용 프로그램/설정/config.yml) :

<?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(); 

    } 


} 
:

fos_user: 
service: 
    user_manager: my_custom_user_manager 

그리고 클래스를 생성

는하지만이 오류를 얻을 :

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

인터페이스에는 추상 메소드가 없습니다. 클래스에서 구현해야하는 메소드를 선언합니다.

오류 메시지에 나열된 방법이 FOS\UserBundle\Model\UserManager에 의해 구현되지 않았기 때문에 UserBundle\Repository\CustomUserManager에 구현해야합니다.

또한 FOS\UserBundle\Model\UserManager을 확장하면 FOS\UserBundle\Model\UserManager이 이미 구현 했으므로 FOS\UserBundle\Model\UserManagerInterface을 구현할 필요가 없습니다.

더 나은 이해를 위해 OOP에서 상속에 대한 몇 가지 설명서를 읽어 보시기 바랍니다. 당신은 그것에 대해 PHP 문서를 찾을 수 있습니다 : Object Inheritance, InterfacesAbstract classes.

+0

감사합니다. 내 실수를 이해합니다. FOS \ UserBundle \ ** Doctrine ** \ UserManager를 확장해야했습니다. FOS \ UserBundle \ ** 모델 ** \ UserManager가 아닙니다. – freezix

관련 문제