Функция поиска Laravel аварийно завершает работу после обновления страницы


У меня есть следующая простая функция поиска

public function search(Request $request)
{
    $posts = Post::where('title', 'like', '%'.$request->term.'%')->paginate(10);
    return view('posts.search', compact('posts'));
}

Мой Маршрут:

Route::group(['prefix' => 'posts', 'as' => 'posts.'], function () {
    Route::post('/search', ['as' => 'posts', 'uses' => 'SearchController@posts']);
});

И мое мнение:

            <form action="{{ route('searches.posts') }}" method="post">
                {{ csrf_field() }}
                <div class="input-field col s6">
                    <input class="input blue-text text-lighten-3" type="text" name="term">
                </div>
                <div class="input-field col s6">
                    <button type="submit">
                        <i class="material-icons">search</i>
                    </button>
                </div>
            </form>

Я вызываю эту функцию после отправки и получаю новое представление со всеми элементами, связанными с поиском. Пока это работает, но если я сейчас обновлю страницу, Я получу следующую ошибку:

Symfony Component HttpKernel Exception MethodNotAllowedHttpException No message

2 4

2 ответа:

Ваш метод формы - post, поэтому по вашему первоначальному запросу метод HTTP-POST. При обновлении страницы браузер делает запрос GET, а не POST.

Убедитесь, что ваш маршрут зарегистрирован для запросов GET и POST:

Route::match(['get', 'post'], '/search', ['as' => 'posts', 'uses' => 'SearchController@search']);

Https://laravel.com/docs/5.5/routing#basic-routing

Вы также можете рассмотреть возможность простого переключения метода формы на get. Это приведет к появлению параметров поиска в URL-адресе и позволит пользователям ссылаться на поисковые результаты.

Вы пытаетесь использовать неправильный метод контроллера. Таким образом, изменить следующим образом:

'uses' => 'SearchController@snippets'

Кому:

'uses' => 'SearchController@search'