如何将每个 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);
}
我试图将所有 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);
}