【发布时间】:2018-11-16 13:23:17
【问题描述】:
我有一个带有授权服务的 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();
}
}
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 **
}
}
}
因此我们的想法是使用BaseController 全局实现此过程,并在会话不存在或使用Authorize 服务无效时重定向到登录页面。
但重定向行会引发错误,尽管这是 symfony docs 关于此主题的正确实现。
我相信是这种情况,因为我试图从服务中重定向,而不是从控制器中重定向。
如何从服务中重定向?
【问题讨论】:
-
ERROR 是什么意思?找出任何提示或答案所需的 90% 的元素都包含在错误中。所以你应该发布错误信息。
标签: php symfony service symfony4 php-7.1