Laravel 基于 POST 请求的分页

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)

有办法做到吗?

sta*_*sta 6

Laravel 分页仅适用于获取参数。

您应该对搜索页面使用GET方法。POST请求并不用于显示数据。为什么?原因有很多,但简单来说,我举三个例子:

1 . 当您访问第一页时,您通过GET请求获取数据,而不是POST请求。所以如果要使用POST请求,需要通过POST方法发送数据来以 POST请求方式访问页面。

2 . 使用GET参数,假设您在第五页 - 您可以复制链接并将其粘贴给朋友,他将能够查看与您相同的内容。对于POST这是不可能的。

3 . 如果您设法使分页正常工作,则不能将后退按钮与POST请求一起使用。

例如,当您需要向服务器提交数据以创建新记录时,POST请求非常有用。

所以我建议你将路由类型更改为GET


Ami*_*han 6

从我的角度来看,如果您将路由代码更改为类似于下面的代码,它将可以正常使用 GET 和 POST 方法。


Route::any('concessions/search', 'ConcessionController@search')->name('concessions.search');
Run Code Online (Sandbox Code Playgroud)