Laravel构造函数重定向不起作用

Irf*_*med 29 php laravel laravel-4

我有一个控制器有几种方法,我需要在每个方法的开始添加一个特定的授权检查.所以我想把这个检查放在构造函数中,

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');
}
Run Code Online (Sandbox Code Playgroud)

}

它不起作用,只是在Session检查中打印消息并加载仪表板页面而不是重定向回登录页面.

我也试过这样的事,

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

当我尝试使用这个奇怪的return语句调用此方法时,它就可以工作了

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

我从这里得到了这个想法.如何使用构造函数方法实现此目的.任何帮助是极大的赞赏.

luk*_*ter 73

返回a Redirect只能从路由,控制器动作和过滤器执行它.否则你必须打电话send()

Redirect::to('login')->send();
Run Code Online (Sandbox Code Playgroud)

然而,你真的应该使用过滤器此

  • 四年后,目前的Laravel 5.6中没有过滤器了.相反,请查看中间件:https://laravel.com/docs/5.6/middleware (4认同)

Sam*_*era 5

确保使用 Illuminate\Routing\Redirector;并将其传递给构造函数。(拉拉维尔 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();
        }
    }
Run Code Online (Sandbox Code Playgroud)