2017-12-14 61 views
1

私は1つのサービスを行うためにsymfonyで、私は、システム内の任意のユーザーのログイン後にいくつかのプロセスを行い、以下のコードは、新しい午前のsymfonyでコントローラを受け入れる方法:redirectToRouteメソッド呼び出し

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

セキュリティファイルで追加1行、以下のコードは:

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));  
     } 

    } 
} 

は、私は、コードのiユーザー上記の条件でのログインベースの後に別のルートにリダイレクトしたい、それが下の私にエラーを与える:

私はsymfonyの中に、ログイン認証成功ハンドラファイルからメソッドを呼び出す方法

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

?あなたはDefaultAuthenticationSuccessHandlerを拡張する

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

答えて

2

。 は、名前の未定義のメソッドを呼び出そうとしました:

しかし、あなたはそれが上記のコードを使用した後のエラーの下に私を与えるHttpUtils 続きを読むと、この方法 generateUri(Request $request, string $path)

+0

を参照してください。この

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

を試すことができますクラス "AppBundle \ Handler \ AuthenticationSuccessHandler"の "generateUrl"。 –

+0

が更新されました。すでに持っているhttpUtilsを直接使うことができます。 '$ request'と' path'または 'ルート名'を2番目の引数として渡したいものを返す 'HttpUtils :: createRedirectResponse()'をチェックしてください。 – dlondero

0

、そうredirectToRouteは() メソッドは、このクラスに存在しません:あなたのような何かを試みることができるので、あなたがコントローラではないです

+0

ルート名を使用する方法ルート名がフルパスではありません。 –

+0

私はあなたがRouterInterfaceを注入する必要があると思います。 このリンクを確認してください。https://stackoverflow.com/questions/31104002/redirecting-in-service-symfony2 – habibun

関連する問題