如何将每个 404 请求保存到数据库

How to save every 404 request to db

我试图将所有 404 请求作为一行保存到数据库中。但无法弄清楚该怎么做。 例如,我访问了示例。com/demo 但 example.com 中不存在演示 对于这种情况,我需要将 "demo" 添加到 missing_pages table。我刚刚为此创建了控制器。但是无法在 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我应该做什么?任何的想法?提前致谢。

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

Route::fallback('RouteNotFoundController@store')

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

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

    abort(404)
}

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

您可以在 app/Exceptions/Handler.php 文件中编码:

public function render($request, Exception $e)
{

    switch ($e->getStatusCode()) {
        // not found
        case 404:
            //Save to DB
            ...
            break;

        // internal error
        case 500:
            //Save to DB
            ...
            break;

        default:
            break;
    }
    return parent::render($request, $e);
}