我正在使用样板 Breeze 路由和模板(目前)为 Laravel 10 应用程序构建一个管理部分,并且我有一组前缀路由,我想在以下情况下返回 404 错误:
换句话说,只有经过身份验证的用户是管理员时,前缀路由才会产生任何实质性的结果。否则,我希望它显示为路线甚至不存在。
我束手无策,试图从中间件返回 404 错误视图和状态代码。我已经修改代码并阅读文档几个小时了,但毫无结果,但我感觉答案就在我面前,但我错过了一些东西。
这是我在 web.php 路由文件中的代码:
Route::prefix('admin')->middleware(['admin'])->group(function() {
Route::get('/', [AdminDashboardController::class, 'index'])->name('admin');
});
这是我在管理中间件的handle()函数中的内容:
public function handle(Request $request, Closure $next): Response
{
if ($request->user() === null || $request->user()->role !== 'admin') {
return response('This page cannot be found', 404, []);
}
return $next($request);
}
这段代码运行得很好。但是,我想返回 404 页面和 HTTP 404 状态代码,而不是带有响应消息的纯文本页面。如果我尝试返回除上述内容之外的任何内容,它似乎会直接跳到下一个中间件。如图所示,它会尝试呈现 Breeze 仪表板组件,就好像用户已登录一样,即使用户未登录也是如此。
有人可以指导我如何返回 404 错误页面和状态代码来代替上面的当前响应吗?
public function handle(Request $request, Closure $next): Response
{
if ($request->user() === null || $request->user()->role !== 'admin') {
//remove this return response('This page cannot be found', 404, []);
abort(404); // replace this
}
return $next($request);
}
这里是设计您自己的 404 错误处理页面的参考 https://magecomp.com/blog/create-custom-error-page-laravel-10/