此行适用于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.
但控制器和方法显然在那里。显然我做错了什么。
答案 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
}
}