首页 > 解决方案 > 如何将每个 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 中做什么?任何想法?提前致谢。

标签: laravelredirecthttp-status-code-404

解决方案


您可以添加回退路由,添加将失败请求存储在数据库中的逻辑,然后返回 404 响应。例如,路线可能如下所示:

Route::fallback('RouteNotFoundController@store')

然后在您的控制器中,逻辑将类似于:

public function store(Request $request)
{
    // Save request to database as required

    abort(404)
}

添加abort调用,它将抛出异常并为您呈现 404 响应。


推荐阅读