2017-12-14 11 views
1

나는 그는 하나 개의 서비스를 만들기위한 심포니에서, 나는, 시스템의 모든 사용자 로그인 후 어떤 과정을, 다음 코드는 새로운 오전 심포니에서 컨트롤러를 수용하는 방법 :redirectToRoute 메소드를 호출

security.authentication.success_handler: 
     class: AppBundle\Handler\AuthenticationSuccessHandler 
     arguments: ["@security.http_utils", {}] 
     tags: 
      - { name: 'monolog.logger', channel: 'security' } 

보안 파일에서 추가 한 줄, 아래 코드는 :

success_handler: security.authentication.success_handler 

폴더 처리기에서 새로운 AuthenticationSuccessHandler 파일을 확인, 코드 아래 :

<?php 

namespace AppBundle\Handler; 

use Symfony\Component\HttpFoundation\JsonResponse; 
use Symfony\Component\HttpFoundation\Request; 
use Symfony\Component\HttpFoundation\RedirectResponse; 
use Symfony\Component\Security\Core\Authentication\Token\TokenInterface; 
use Symfony\Component\Security\Http\Authentication\DefaultAuthenticationSuccessHandler; 
use Symfony\Component\Security\Http\HttpUtils; 
use Symfony\Component\HttpFoundation\Response; 


class AuthenticationSuccessHandler extends DefaultAuthenticationSuccessHandler { 

    public function __construct(HttpUtils $httpUtils, array $options) { 

     parent::__construct($httpUtils,$options); 
    } 

    public function onAuthenticationSuccess(Request $request, TokenInterface $token) { 
     $user=$token->getUser(); 
     if (!empty($user) && $user->hasRole('ROLE_MEDICAL_PROVIDER')) { 
      if($user->getMedicalProvider()->getIsRegistrationCompleted() != 1) { 
       if($user->getMedicalProvider()->getRequestAssistance() == 1) { 


        return $this->redirectToRoute('registration_medical_provider_step'.$user->getMedicalProvider()->getRequestAssistanceStep()); 


       } else { 
        return $this->httpUtils->createRedirectResponse($request, $this->determineTargetUrl($request)); 
       } 
      } else { 
       return $this->httpUtils->createRedirectResponse($request, $this->determineTargetUrl($request));  
      } 

     } 
     else { 
      return $this->httpUtils->createRedirectResponse($request, $this->determineTargetUrl($request));  
     } 

    } 
} 
내가 코드를 내가 사용자가 위의 조건에 로그인베이스 후 다른 경로로 리디렉션 할 그것은 나를 아래 오류 제공

:

Error: Call to undefined method redirectToRoute() In AuthenticationSuccessHandler.php file

가 어떻게 심포니에서 로그인 인증 성공 핸들러 파일에서 메소드를 호출? 당신은 DefaultAuthenticationSuccessHandler을 확장하고

return $this->httpUtils->createRedirectResponse($request, 'registration_medical_provider_step'.$user->getMedicalProvider()->getRequestAssistanceStep()); 

답변

2

. 라는 정의되지 않은 메서드를 호출하는 시도 :

그러나, 당신은 위의 코드 사용 후 오류 아래 내게 줄이

$this->httpUtils->generateUri($request, 'your_target_path');

HttpUtils 읽기 시도하고이 방법을 generateUri(Request $request, string $path)

+0

를 볼 수 있습니다 "AppBundle \ Handler \ AuthenticationSuccessHandler"클래스의 "generateUrl". –

+0

업데이트 됨. 이미 가지고있는 httpUtils를 직접 사용할 수 있습니다. '$ request'와'경로'또는'경로 이름'을 두 번째 매개 변수로 전달하고자하는 것을 정확하게 반환하는'HttpUtils :: createRedirectResponse()'를 확인하십시오. – dlondero

0

, 그래서 redirectToRoute()가 방법이 클래스에 존재하지 않는 : 당신이 뭔가를 시도 할 수 있도록이 컨트롤러 아니에요

+0

경로 이름 사용 방법 becuz 경로 이름이 전체 경로가 아닙니다. –

+0

그러면 RouterInterface를 주입해야한다고 생각합니다. 이 링크를 확인하십시오. https://stackoverflow.com/questions/31104002/redirecting-in-service-symfony2 – habibun