微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

laravel 路由回调返回控制器

如何解决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 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?