laravel - 如何将每个 404 请求保存到数据库
问题描述
我试图将所有 404 请求作为一行保存到数据库中。但不知道该怎么做。例如,我访问了 example.com/demo,但 example.com 中不存在演示。对于这种情况,我需要将“demo”添加到 missing_pages 表中。我刚刚为此创建了控制器。但是无法在 web.php 中处理,我需要与提供者一起做吗?中间件?什么都做不了。
public function test($slug)
{
if (empty(MissingPage::where('slug', $slug)->get())) {
$mp = new MissingPage();
$mp->slug = $slug;
$mp->count = 1;
}
else {
$mp = MissingPage::where('slug', $slug)->first();
$mp->increment('count');
}
}
我应该在 web.php 中做什么?任何想法?提前致谢。
解决方案
您可以添加回退路由,添加将失败请求存储在数据库中的逻辑,然后返回 404 响应。例如,路线可能如下所示:
Route::fallback('RouteNotFoundController@store')
然后在您的控制器中,逻辑将类似于:
public function store(Request $request)
{
// Save request to database as required
abort(404)
}
添加abort
调用,它将抛出异常并为您呈现 404 响应。