Laravel 4 Laravel return Redirect::不在操作外部工作

Laravel 4 Laravel return Redirect::不在操作外部工作,laravel-4,Laravel 4,如果我把重定向放在动作之外,我会发现一个奇怪的重定向不起作用。例如: 下面的代码正在运行 Route::get('/', 'HomeController@index'); public function index() { if (Auth::check()) { $this->user_id = Auth::id(); } else { return Redirect::to('/'); } //

如果我把重定向放在动作之外,我会发现一个奇怪的重定向不起作用。例如:

下面的代码正在运行

Route::get('/', 'HomeController@index');

public function index()
{
    if (Auth::check())
    {
        $this->user_id = Auth::id();
    }
    else
    {
        return Redirect::to('/');
    }

    // code after check
}
但是如果我像下面那样取出它,重定向将不起作用。它根本不会重定向

Route::get('/', 'HomeController@index');

public function index()
{
    $this->authorize();        
    // code after check
}

private function authorize()
{
    if (Auth::check())
    {
        $this->user_id = Auth::id();
    }
    else
    {
        return Redirect::to('/');
    }
}
现在,如果我必须在每一个动作中都使用if语句,那将很麻烦。相反,我只需要调用$this->authorize()


知道它为什么不起作用吗?

您没有返回“return Redirect::to('/');”的结果

试试这个:

public function index()
{
    return $this->authorize();        
}

只是一个额外的。如果我使用我的问题的想法,这似乎是一种不好的方式。Laravel实际上提供了路由保护。因此,现在我通过以下步骤更改代码:

在app/filter.php中,更改要重定向到的路由

Route::filter('auth', function()
{
    if (Auth::guest()) return Redirect::guest('/');
});
在路线保护中,请使用以下代码: 路由::获取('/','HomeController@index');

删除BlablaController上的授权功能

在索引函数上,按如下方式更改:

public function index()
{
    $this->user_id = Auth::id();

    // code after check
}

现在,如果未经身份验证,它将自动重定向到“/”

是。身份验证过滤器是实现身份验证的最佳方式

此外,如果使用“Route:when”设置过滤器,则可以使routes.php更易于阅读,如下所示:

Route::when('path/*', 'auth');

有了它,您可以最大限度地减少在路由语句中写入数组('before'=>'auth')。

upps,它实际上与您的解决方案一起工作。谢谢
Route::when('path/*', 'auth');