【问题标题】:How to call redirectToRoute method accept controller in symfony如何在 symfony 中调用 redirectToRoute 方法接受控制器
【发布时间】:2017-12-14 06:49:20
【问题描述】:

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

    }
}

我想在登录后根据我用户上面的代码条件重定向到另一条路线,它给了我以下错误:

错误:调用未定义的方法 redirectToRoute() In AuthenticationSuccessHandler.php 文件

如何从 symfony 中的登录验证成功处理程序文件中调用方法?

【问题讨论】:

    标签: php symfony symfony-forms


    【解决方案1】:

    您不在控制器中,因此您可以尝试以下操作:

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

    【讨论】:

    • 使用上述代码后出现以下错误:尝试调用类“AppBundle\Handler\AuthenticationSuccessHandler”的名为“generateUrl”的未定义方法。
    • 已更新。您可以直接使用您已经拥有的 httpUtils。检查HttpUtils::createRedirectResponse(),它返回的正是你想要传递$requestpathroute name 作为第二个参数。
    【解决方案2】:

    你正在扩展 DefaultAuthenticationSuccessHandler,所以 redirectToRoute() 该类中不存在方法。

    不过,你可以试试这个

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

    阅读更多HttpUtils 看看这个方法 generateUri(Request $request, string $path)

    【讨论】:

    猜你喜欢
    • 2014-11-11
    • 1970-01-01
    • 2023-04-01
    • 2019-07-08
    • 2020-01-09
    • 2016-11-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多