如何在Laravel 9中的同一路线名称上使用多个中间Wares?
我希望我的 /仪表板页面在2种不同的用户类型中成为不同的面板。如果未登录,返回主屏幕。我创建了2个中间Wares来检查登录用户是“雇主”或“雇员”。无论我做什么,我似乎都无法使它起作用,已经两天了。我通过遵循一些非常粗略的教程来创建中间的中间菜和路线,这可能会伤害您的眼睛,请注意。
我的路线:
Route::get('/dashboard', function () {
return view('welcome');
})->name('welcome');
Route::prefix('admin')->middleware([\App\Http\Middleware\isEmployer::class])->group( function () {
Route::get("/dashboard", function (){
return view("employer.dashboard");
})->name("dashboard");
});
Route::prefix('store')->middleware([\App\Http\Middleware\isEmployee::class])->group( function(){
Route::get("/dashboard", function (){
return view("employee.dashboard");
})->name("dashboard");
});
Isemployee中间件:
<?php
namespace App\Http\Middleware;
use Closure;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;
class isEmployee
{
public function handle(Request $request, Closure $next)
{
if(Auth::user())
{
if (Auth::user()->role == "employee")
{
return $next($request);
}
}
return response()->view('welcome');
}
}
Isemployer中间件:
<?php
namespace App\Http\Middleware;
use Closure;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;
class isEmployer
{
public function handle(Request $request, Closure $next)
{
if(Auth::user())
{
if (Auth::user()->role == "employer")
{
return $next($request);
}
}
return response()->view('welcome');
}
}
我想实现的目标是:
如果未登录:
如果登录为雇主,请返回欢迎视图:返回雇主
:Dashboard View如果登录为雇员
I want my /dashboard page to be a different panel in 2 different user types. And return to home screen if not logged in. I created 2 middlewares to check if logged in user is "employer" or "employee". Whatever I do, I can't seem to make it work, it's been 2 days. I created middlewares and routes by following some very sketchy tutorials, it may hurt your eyes, be aware.
My route:
Route::get('/dashboard', function () {
return view('welcome');
})->name('welcome');
Route::prefix('admin')->middleware([\App\Http\Middleware\isEmployer::class])->group( function () {
Route::get("/dashboard", function (){
return view("employer.dashboard");
})->name("dashboard");
});
Route::prefix('store')->middleware([\App\Http\Middleware\isEmployee::class])->group( function(){
Route::get("/dashboard", function (){
return view("employee.dashboard");
})->name("dashboard");
});
isEmployee middleware:
<?php
namespace App\Http\Middleware;
use Closure;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;
class isEmployee
{
public function handle(Request $request, Closure $next)
{
if(Auth::user())
{
if (Auth::user()->role == "employee")
{
return $next($request);
}
}
return response()->view('welcome');
}
}
isEmployer middleware :
<?php
namespace App\Http\Middleware;
use Closure;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;
class isEmployer
{
public function handle(Request $request, Closure $next)
{
if(Auth::user())
{
if (Auth::user()->role == "employer")
{
return $next($request);
}
}
return response()->view('welcome');
}
}
What I want to achieve is:
if not logged in : return welcome view
if logged in as employer : return employer.dashboard view
if logged in as employee : return employee.dashboard view
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
让我们从一些重构开始:
使您的
路由/web.php
更可读性:现在,让我们创建一个中间件,不仅可以检查一个角色,而且还可以作为参数扮演的任何角色:
现在,在
app/http/kernel.php
中创建一个别名,以便您可以像我在路由文件中写的那样使用它角色:&lt; cromor_here&gt;
:<
// ...
'角色'=&gt; \ app \ http \ middleware \ hasrole :: class,
];
现在为您的问题 - 如何将多个中间件用于一条路线。很简单:
您可以将它们附加到组或单个路线上:
您可以阅读有关Laravel的Middlewares 在这里,并了解什么 /a>是(中间件在引擎盖下实现的模式)。还要查看 solid 原理,主要是在干燥的地方。祝你有美好的一天=)
Let's start from some refactoring:
Make your
routes/web.php
a bit more readable:Now let's create a middleware that will check not only for one role, but for any role you give as a parameter:
Now, create an alias in your
app/Http/Kernel.php
so you could use it like i wrote it in routes filerole:<role_here>
:Now for your question - how to use multiple middlewares for one route. It is simple:
You may attach them to groups or single routes:
You can read more info about Laravel's middlewares here, and understand what responsibility chain is (pattern which middleware implements) under the hood. Also take a look at SOLID principles, mainly at DRY one. Have a good day =)