Symfony PHP - 从服务中重定向

yev*_*evg -1 php service symfony php-7.1 symfony4

我有一个带有授权服务的Symfony 4应用程序,我想处理一些更高级别的逻辑,以确定给定用户是否可以访问给定路由.

我实现了这个 BaseController

namespace App\Controller;

use Symfony\Component\HttpFoundation\Response;
use Symfony\Bundle\FrameworkBundle\Controller\Controller;

use App\Services\Authorize;

class BaseController extends Controller {

    private $auth;

    public function __construct(Authorize $auth){

        $this->auth = $auth;
    }

    public function initBaseController() {

        $this->auth->do_authorize();
    }      
}
Run Code Online (Sandbox Code Playgroud)

Authorize服务是这样的:

namespace App\Services;

use Symfony\Component\HttpFoundation\RedirectResponse;
use App\Services\Session;

class Authorize {

    private $session;

    public function __construct(Session $session){

        $this->session  = $session;
    }

    public function do_authorize(){

        if($this->session->validate('fake_token'){

            return $this->redirectToRoute('login-portal'); // ** ERROR **
        }

    }

}
Run Code Online (Sandbox Code Playgroud)

因此,BaseController如果会话不存在或使用Authorize服务无效,则使用和重定向到登录页面全局实现此过程.

但是重定向行会抛出错误,尽管这是关于此主题的symfony文档中的正确实现.

我相信这是因为我试图从服务中重定向,而不是控制器.

如何从服务中重定向?

Fel*_*rte 5

别.从控制器返回truefalse重定向

public function initBaseController()
{
    $auth = $this->auth->do_authorize();
    if($auth) {
        return $this->redirectToRoute('login-portal');
    }
}


public function do_authorize()
{
    return $this->session->validate('fake_token');
}
Run Code Online (Sandbox Code Playgroud)

控制器负责执行重定向,而不是其他层.