📅  最后修改于: 2023-12-03 14:51:00.279000             🧑  作者: Mango
在 Laravel 中,通常我们可以使用 abort(404)
函数来返回一个 404 错误,但是这不会把用户重定向到 404 页面。本文将介绍如何在 Laravel 中重定向 404 错误。
我们可以创建一个 Middleware 来处理 404 错误:
<?php
namespace App\Http\Middleware;
use Closure;
use Illuminate\Http\Request;
class RedirectIfNotFound
{
public function handle(Request $request, Closure $next)
{
$response = $next($request);
if ($response->status() == 404) {
return redirect('/404');
}
return $response;
}
}
接着,在 App\Http\Kernel.php
文件中注册该 Middleware:
protected $routeMiddleware = [
// ...
'redirect.if.not.found' => \App\Http\Middleware\RedirectIfNotFound::class,
];
我们可以在需要的路由中使用该 Middleware:
Route::get('/my-page', function () {
return view('my-page');
})->middleware('redirect.if.not.found');
当用户访问未定义的路由时,将会被重定向到 /404
页面。
Laravel 还提供了一个功能强大的异常处理器,我们可以在其中添加一个 render()
方法来自定义处理 404 错误:
<?php
namespace App\Exceptions;
use Exception;
class NotFoundException extends Exception
{
public function render($request)
{
return redirect('/404');
}
}
接下来,我们需要向 Laravel 中添加自定义异常处理器。只需在 App\Exceptions\Handler.php
文件中的 $dontReport
数组中添加新的异常类:
protected $dontReport = [
// ...
\App\Exceptions\NotFoundException::class,
];
现在,我们只需在需要的地方抛出 App\Exceptions\NotFoundException
异常即可:
Route::get('/my-page', function () {
if (! $myPageExists) {
throw new \App\Exceptions\NotFoundException();
}
return view('my-page');
});
当用户访问未定义的路由时,将会被重定向到 /404
页面。
以上就是两种使用 Laravel 重定向 404 错误的方法,您可以根据实际情况进行选择。