Symfony PHP - перенаправление из службы - PullRequest
0 голосов
/ 06 июня 2018

У меня есть приложение 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 на эту тему.

Я полагаю, что это так, потому что я пытаюсь перенаправить из службы, а не контроллера.

Как можно перенаправить из службы?

1 Ответ

0 голосов
/ 06 июня 2018

Не.Возврат 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');
}

Контроллер отвечает за перенаправления, а не другой уровень.

...