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文档中的正确实现.
我相信这是因为我试图从服务中重定向,而不是控制器.
如何从服务中重定向?
别.从控制器返回true或false重定向
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)
控制器负责执行重定向,而不是其他层.
| 归档时间: |
|
| 查看次数: |
454 次 |
| 最近记录: |