Laravel搜索功能在页面刷新后崩溃

时间:2018-01-21 16:48:55

标签: php laravel symfony search laravel-5.5

我遵循简单的搜索功能

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没有消息

2 个答案:

答案 0 :(得分:1)

您的表单方法是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中,并使用户能够链接到搜索结果。

答案 1 :(得分:1)

您正在尝试使用错误的控制器方法。所以,改变这个:

'uses' => 'SearchController@snippets'

要:

'uses' => 'SearchController@search'