Laravel 5:重定向困境

时间:2015-06-16 17:03:13

标签: laravel

此行适用于routes.php:

Route::get('faq', 'HomeController@faq');

所以我把它评论出来试试这个:当用户登录时不起作用。它不会重定向到上述代码中的控制器动作:

Route::get('faq', function()
{
    if (Auth::check())
    {
        return redirect()->action('HomeController@faq');
    }
    else
    {
        return Redirect::to('/');
    }
});

错误:

New exception in xxxx.xx
InvalidArgumentException · GET /faq
Action App\Http\Controllers\HomeController@faq not defined.

但控制器和方法显然在那里。显然我做错了什么。

1 个答案:

答案 0 :(得分:6)

您正尝试在路径定义中路由某些内容。这不是它的工作原理。

有几种方法可以做你想要达到的目标。每个人都有利弊 - 但他们都会工作。

通常,最好的方法是使用一些Auth middleware on your route。 Laravel 5 includes this out of the box

Route::group(['middleware' => 'auth'], function () {
    Route::get('faq', 'HomeController@faq');
});

因此用户必须登录才能访问常见问题解答。

另一种选择是Controller Middleware

Route::get('faq', 'HomeController@faq');

然后在你的HomeController中

class HomeController extends Controller
{
    public function __construct()
    {   
        $this->middleware('auth', ['only' => ['faq']]);
    }

    public function faq()
    {    
        // Only logged in users can see this
    }
}