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

时间:2019-04-09 10:55:26

标签: laravel redirect http-status-code-404

我试图将所有404请求作为一行保存到数据库中。但是不知道该怎么做。 例如,我曾访问过example.com/demo,但example.com中不存在演示 对于这种情况,我需要在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中做什么?任何想法?预先感谢。

2 个答案:

答案 0 :(得分:3)

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

Route::fallback('RouteNotFoundController@store')

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

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

    abort(404)
}

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

答案 1 :(得分:1)

您可以在variables文件中进行编码:

searchByCustomerIdGraphQL() {
  this.apollo.watchQuery({
    query: findCustomerQuery,
    variables: {id: this.customerIdValue}
  })
  .valueChanges.subscribe(...)
}