JS_*_*str 3 post pagination laravel
我正在使用 Laravel v7,我有一个关于分页的问题。
到目前为止,我使用 2 个路由,第一个返回包含数据库中所有行的视图,第二个接收输入并返回该视图,其中包含按该输入值过滤的行。
但是我使用分页,在第二条路线上,当我尝试转到第二页时,它给了我一个错误:
Symfony\Component\HttpKernel\Exception\MethodNotAllowedHttpException
The GET method is not supported for this route. Supported methods: POST.
Run Code Online (Sandbox Code Playgroud)
我尝试将表单方法更改为 GET,但我需要令牌不会出现在页面 URL 上,除此之外,当我转到第二页时,它会再次返回所有行。
到目前为止,这是我的代码:
路线:
Route::get('concessions', 'ConcessionController@index')->name('concessions.index');
Route::post('concessions/search', 'ConcessionController@search')->name('concessions.search');
Run Code Online (Sandbox Code Playgroud)
控制器
class ConcessionController extends Controller
{
public function index()
{
$concessions = DB::table('concessions')->paginate(12);
return view('admin.concessions.index', compact('concessions'));
}
public function search(Request $request)
{
$name = $request->name;
$concessions = Concession::where('name', 'like', '%' . $name . '%')->paginate(12);
return view('admin.concessions.index', compact('concessions', 'name'));
}
}
Run Code Online (Sandbox Code Playgroud)
有办法做到吗?
Laravel 分页仅适用于获取参数。
您应该对搜索页面使用GET方法。POST请求并不用于显示数据。为什么?原因有很多,但简单来说,我举三个例子:
1 . 当您访问第一页时,您通过GET请求获取数据,而不是POST请求。所以如果要使用POST请求,需要通过POST方法发送数据来以 POST请求方式访问页面。
2 . 使用GET参数,假设您在第五页 - 您可以复制链接并将其粘贴给朋友,他将能够查看与您相同的内容。对于POST这是不可能的。
3 . 如果您设法使分页正常工作,则不能将后退按钮与POST请求一起使用。
例如,当您需要向服务器提交数据以创建新记录时,POST请求非常有用。
所以我建议你将路由类型更改为GET。
从我的角度来看,如果您将路由代码更改为类似于下面的代码,它将可以正常使用 GET 和 POST 方法。
Route::any('concessions/search', 'ConcessionController@search')->name('concessions.search');
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3339 次 |
| 最近记录: |