Подтвердить что ты не робот

Переадресация конструктора Laravel не работает

У меня есть контроллер с несколькими методами, и мне нужно добавить определенную проверку авторизации при запуске каждого метода. Поэтому я решил поставить эту проверку в конструкторе как,

class AdminController extends BaseController {

public function __construct() {
    $this->isAuthorized();
}

protected $layout = "layouts.main";

private function isAuthorized() {
    if (!Session::get('userId')) {
        echo "inside check"; // checking for debug purpose
        return Redirect::to('login');
    }
}

/**
 * Admin dashboard view after authentication.
 */
public function getDashboard() {
    $this->layout->content = View::make('admin.dashboard');
}

}

Он не работает, он просто печатает сообщение внутри сеанса проверки и загружает страницу панели мониторинга, а не перенаправляет обратно на страницу входа.

Я тоже пробовал что-то вроде этого,

 public function getDashboard() {
    $this->isAuthorized();
    $this->layout->content = View::make('admin.dashboard');
}

Когда я пытаюсь вызвать этот метод с помощью этого странного оператора return, он работает

public function getDashboard() {
    return $this->isAuthorized();
    $this->layout->content = View::make('admin.dashboard');
}

Я получаю эту идею от здесь. Как это сделать, используя метод конструктора. Любая помощь приветствуется.

4b9b3361

Ответ 2

Обязательно используйте Illuminate\Routing\Redirector; и передать его конструктору. (Laravel 5.2)

use Illuminate\Routing\Redirector;

class ServiceController extends Controller {

    public function __construct(Request $request, Redirector $redirect) {
        $this->service = Auth::user()->Service()->find($request->id);
        if (!$this->service) {
            $redirect->to('/')->send();
        }
    }

Ответ 3

Событие с Illuminate\Routing\Redirector, laravel задает перенаправление в HTTP-заголовке, но также продолжает выполнять запрос, так как нет перенаправления. Таким образом, решением является использование die() после перенаправления.

public function __construct(Request $request, \Illuminate\Routing\Redirector $redirecor)
{
    //$bool = ...
    if (false == $bool) {
        $redirecor->action('[email protected]')->send() ;
        die();
    }
}