[英]How to call redirectToRoute method accept controller in symfony
我是symfony的新手,在任何用戶登錄系統后我都會執行一些過程,以便提供一項服務,代碼如下:
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));
}
}
}
我想在登錄后根據上面的代碼我用戶的情況重定向到另一條路由,它給我以下錯誤:
錯誤:在AuthenticationSuccessHandler.php文件中調用未定義的方法redirectToRoute()
如何從symfony中的登錄身份驗證成功處理程序文件中調用方法?
您不在控制器中,因此可以嘗試以下操作:
return $this->httpUtils->createRedirectResponse($request, 'registration_medical_provider_step'.$user->getMedicalProvider()->getRequestAssistanceStep());
您正在擴展DefaultAuthenticationSuccessHandler,因此此類中不存在redirectToRoute()方法。
但是,您可以嘗試一下
$this->httpUtils->generateUri($request, 'your_target_path');
閱讀更多HttpUtils並查看此方法generateUri(Request $request, string $path)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.