Я пытаюсь сохранить все 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? Есть идеи? Заранее спасибо.






Вы можете добавить резервный маршрут, добавить логику для сохранения неудачного запроса в базе данных, а затем вернуть ответ 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);
}
Я согласен со всем, что сказал @George, плюс не забывайте, что для того, чтобы маршрут
fallbackработал, он должен быть вашим последним маршрутом, определенным вweb.php. Вот документы: laravel.com/docs/master/routing#fallback-маршруты