2017-12-24 36 views
1


를 autowire하기 할 수 없습니다
심포니 4 : 내 이벤트 리스너에 후 UserInterface를 추가하면 이벤트 리스너는 내가 오류 다음 한 후 UserInterface

Cannot autowire service "App\EventListener\ControllerListener": argument "$user" of method "__construct()" references interface "Symfony\Component\Security\Core\User\UserInterface" but no such service exists. It cannot be auto-registered because it is from a different root namespace. 


내가 다른 서비스를 무슨 일이 일어나고 있는지 모른다 잘 작동합니다. 코드를 찾고 내가 뭘 잘못하고 있는지 말해 줄 수 있습니까?

~ SRC /의 EventListener/ControllerListener.php

<?php 
namespace App\EventListener; 

use App\Entity\User; 
use App\Entity\DailyWin; 
use App\Controller\DailyWinController; 
use Psr\Log\LoggerInterface; 
use Symfony\Component\Security\Core\User\UserInterface; 
use Symfony\Bundle\FrameworkBundle\Controller\Controller; 
use Symfony\Component\HttpKernel\Event\FilterControllerEvent; 
use Symfony\Component\Security\Core\Authorization\AuthorizationCheckerInterface; 

class ControllerListener extends Controller implements DailyWinController 
{ 
    private $authChecker, $user, $logger; 

    public function __construct(UserInterface $user, AuthorizationCheckerInterface $authChecker, LoggerInterface $logger) { 
     $this->user = $user; 
     $this->authChecker = $authChecker; 
     $this->logger = $logger; 
    } 

    public function onKernelController(FilterControllerEvent $event) { 
     if ($this->authChecker->isGranted('IS_AUTHENTICATED_FULLY') === false) return; 

     $this->logger->warning('Inicjowanie...'); 

     $em = $this->getDoctrine()->getManager(); 
     $DWrep = $em->getRepository(DailyWin::class); 

     $userId = $this->user->getId(); 
     $userDailyWin = $DWrep->findOneBy(['userId' => $userId]); 
     $this->logger->warning(print_r($userDailyWin)); 

     if (empty($userDailyWin)) { 
      $currentDate = new \DateTime(date('Y-m-d', time())); 
      $userDailyWin = new DailyWin(); 
      $userDailyWin->setUserId($userId); 
      $userDailyWin->setMultiplier(0); 
      $userDailyWin->setClaimed(0); 
      $userDailyWin->setStreak(0); 
      $userDailyWin->setLastLogin($currentDate); 

      $em->persist($userDailyWin); 
      $em->flush(); 
     } 
    } 
} 

감사합니다.

+0

그래서에 따라 예상 할 주입 한 것으로? – Cerad

+0

@Cerad - 로그인 한 사용자 (내 타겟) – Invictus

+1

현재 로그인 한 사용자를 얻는 방법을 찾으십시오. Controller :: getUser()를 예로 들어 보겠습니다. – Cerad

답변

2

사용자가 심포니 서비스가 아니며 자동 실행되지 않습니다.

이 인터페이스를 사용해보십시오 :

Symfony\Component\Security\Core\Authentication\Token\Storage\TokenStorageInterface 

그럼 당신이 할 :

$user=$tokenStorage->getToken()->getUser(); 
0

은 심포니 3.2 이후, 새 사용자 해결이 소개되었다. 생성자를 통한 주입을 허용하지 않는 것처럼 보입니다. (나는이 작업을하려고했습니다.)하지만 대신에 메서드에 주입해야합니다.

public function onKernelController(UserInterface $user , FilterControllerEvent $event) { 

사용자가이 $ documentation