这行在routes.php中有效:
Route::get('faq', 'HomeController@faq');
Run Code Online (Sandbox Code Playgroud)
所以我将其注释掉并尝试这样:当用户登录时不起作用.它不会重定向到上述代码中的控制器操作:
Route::get('faq', function()
{
if (Auth::check())
{
return redirect()->action('HomeController@faq');
}
else
{
return Redirect::to('/');
}
});
Run Code Online (Sandbox Code Playgroud)
错误:
New exception in xxxx.xx
InvalidArgumentException · GET /faq
Action App\Http\Controllers\HomeController@faq not defined.
Run Code Online (Sandbox Code Playgroud)
但控制器和方法显然在那里.显然我做错了什么.
您正尝试在路由定义本身中路由某些内容.这不是它的工作原理.
有几种方法可以做你想要达到的目标.每个人都有利弊 - 但他们都会工作.
通常,最好的方法是在路线上使用一些Auth中间件.Laravel 5 开箱即用:
Route::group(['middleware' => 'auth'], function () {
Route::get('faq', 'HomeController@faq');
});
Run Code Online (Sandbox Code Playgroud)
因此用户必须登录才能访问常见问题解答.
另一种选择是做控制器中间件:
Route::get('faq', 'HomeController@faq');
Run Code Online (Sandbox Code Playgroud)
然后在你的HomeController中:
class HomeController extends Controller
{
public function __construct()
{
$this->middleware('auth', ['only' => ['faq']]);
}
public function faq()
{
// Only logged in users can see this
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
294 次 |
| 最近记录: |