【发布时间】:2020-12-02 06:51:27
【问题描述】:
在 PHP 7.4 上的 Laravel 7 中。我在/search 有一个GET 路由,它被路由到SearchController 的index 方法。这会呈现表单。用户填写一个搜索词并将其发布到/search(具有自己的单独路由),它映射到SearchController 的results 方法。这一切都很好。
结果对集合使用分页,分页器生成的链接格式为/search?searchterm=foo&page=2,这些当然会产生GET请求。问题是对/search 端点的GET,无论是否带有URL 参数,总是会转到表单视图。我不清楚我应该如何设置我的路由,以便通过与带有查询参数的 GET 相同的控制器方法处理到 /search 的 POST。
我从这个开始,它呈现表单,接受搜索请求,并正确显示结果的 第一页,但对其他页面的请求与分页参数最终回到搜索表单:
Route::get('search', 'SearchController@index')->name('search.index');
Route::post('search', 'SearchController@results')->name('search.results');
这是我迄今为止尝试过的,接受对 GET 和 POST 的请求,检查输入,并将其发送到适当的控制器方法:
Route::match(['get', 'post'], 'search', function () {
if (request()->filled('searchterm')) {
Route::post('search', 'SearchController@results')->name('search.results');
} else {
Route::get('search', 'SearchController@index')->name('search.index');
}
});
这确实......什么都没有,只是 GET 和 POST 的空白屏幕没有记录任何错误,所以我认为它不匹配任何内容。我真的不知道您是否可以像这样将一个路由定义放在另一个路由定义中。在其中重复search 路径也感觉不对。我发现了与此类似的示例,它们直接从路由返回不同的视图,但我想像往常一样将它发送到控制器。
澄清一下,发送到/search 的 POST 应该使用相同的控制器方法并产生与发送到 /search?searchterm=foo&page=1 的 GET 相同的结果。
在我看来,我正在生成分页链接:
{{ $items->withQueryString()->links() }}
我应该如何路由这些请求?使用redirect()?定义匹配查询参数的路由的某种方式?
【问题讨论】: