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

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...