Как сохранить каждые 404 запроса в БД - PullRequest
1 голос
/ 09 апреля 2019

Я пытаюсь сохранить все 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 ]

3 голосов
/ 09 апреля 2019

Вы можете добавить запасной маршрут, добавить логику для хранения неудавшегося запроса в базе данных и затем вернуть ответ 404.Например, маршрут может выглядеть следующим образом:

Route::fallback('RouteNotFoundController@store')

Тогда в вашем контроллере логика будет выглядеть примерно так:

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

    abort(404)
}

При добавлении вызова abort будет выброшеноисключение и выдайте вам ответ 404.

1 голос
/ 09 апреля 2019

Вы можете кодировать в 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);
}
...