Переадресация конструктора 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');
}
Я получаю эту идею от здесь.
Как это сделать, используя метод конструктора. Любая помощь приветствуется.
Ответы
Ответ 1
Возвращение Redirect
для выполнения возможно только из маршрутов, действий контроллера и фильтров. В противном случае вам нужно позвонить send()
Redirect::to('login')->send();
Однако вы действительно должны использовать фильтр для этого
Ответ 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();
}
}