Laravel将Redirect ::返回到外部动作

时间:2014-10-12 05:46:27

标签: laravel-4

如果我将重定向放在操作之外,我得到了一个奇怪的重定向无效。例如:

以下代码正在运作

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();

知道它为什么不起作用?

3 个答案:

答案 0 :(得分:1)

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

的结果

试试这个:

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

答案 1 :(得分:1)

只是一个额外的。如果我使用我的问题的想法似乎是一个坏方法。 Laravel实际上提供了路线保护。所以,现在我按照以下步骤更改我的代码:

app / filter.php中的

更改您想要路由的重定向。

Route::filter('auth', function()
{
    if (Auth::guest()) return Redirect::guest('/');
});

在您的路线保护中使用以下代码:     Route :: get('/','HomeController @ index');

Route::group(array('before' => 'auth'), function()
{
    // The list of routes you want to protect with authentication
    Route::get('blabla', 'BlablaController@index');
}

删除BlablaController上的authorize函数

在索引函数上更改如下:

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

    // code after check
}

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

答案 2 :(得分:0)

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

另外,如果你使用'Route:when'设置过滤器,你可以让你的routes.php更容易阅读,如下所示:

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

有了这个,你可以在Route语句中最小化写入数组('before'=>'auth')。