如何解决laravel 路由回调返回控制器
你好,我是 laravel 的新手,也许这对你们这里的人来说很傻。 在 laravel 8 路由 web.PHP 我创建了这样的路由:
Route::get('/',function () {
return view('login');
});
Route::post('/auth','App\Http\Controllers\SiteController@auth');
Route::get('/home',function () {
if (session()->has('username')) return view('home');
else return redirect('/');
});
Route::post('/editprofile','App\Http\Controllers\SiteController@edit_profile');
我想问的是,我们可以像视图一样从回调中返回控制器吗?假设我想在用户编辑他的个人资料时检查会话。所以在路由/editprofile 中,第二个参数不是'App\Http\Controllers\SiteController@edit_profile',而是一个像路由'/home' 的回调函数。像这样:
Route::post('/home',function () {
if (session()->has('username')) return controller('App\Http\Controllers\SiteController@edit_profile');
else return redirect('/');
});
但它返回错误哈哈。假设我不想使用 __construct 方法来检查会话。是否有可能?提前致谢
解决方法
第一件事,
由于您是从 if 语句返回,因此不需要 else
这个
Route::get('/home',function () {
if (session()->has('username')) return view('home');
else return redirect('/');
});
应该是这样的;
Route::get('/home',function () {
if (session()->has('username')) {
return view('home');
}
return redirect('/');
});
第二,不要担心所有这些,如果在路由内部,只需将它传递给您的控制器,在其上放置一个路由中间件。下面是基本的身份验证中间件,但您也可以创建自己的
use App\Http\Controllers\UserController;
Route::get('/home',[HomeController::class,'index'])->middleware('auth');
您可以在此处阅读有关中间件的更多信息https://laravel.com/docs/8.x/middleware
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。