【问题标题】:Laravel Pagination on POST requestPOST请求的Laravel分页
【发布时间】:2020-12-30 02:59:14
【问题描述】:

我正在使用 Laravel v7,我有一个关于分页的问题。

到目前为止,我使用 2 条路由,第 1 条返回包含数据库中所有行的视图,第 2 条接收输入并返回该视图,其中包含由该输入值过滤的行。

但我使用分页,在第二条路线上,当我尝试转到第二页时,它给了我一个错误:

Symfony\Component\HttpKernel\Exception\MethodNotAllowedHttpException
The GET method is not supported for this route. Supported methods: POST.

我尝试将表单方法更改为 GET,但我需要令牌不会出现在页面 URL 上,除此之外,当我转到第二页时,它会再次返回所有行。

到目前为止,这就是我的代码:

路线:

Route::get('concessions', 'ConcessionController@index')->name('concessions.index');
Route::post('concessions/search', 'ConcessionController@search')->name('concessions.search');

控制器

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'));
    }
}

有什么办法吗?

【问题讨论】:

    标签: laravel post pagination


    【解决方案1】:

    Laravel pagination 仅适用于获取参数。

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

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

    2。使用 GET 参数,假设您在第 5 页 - 您可以 复制链接并粘贴给朋友,他将能够查看 和你一样的内容。使用 POST 这是不可能的。

    3。如果您设法使用 POST 请求,则不能使用返回按钮 让分页工作。

    当您需要向服务器提交数据以创建新记录时,

    POST 请求非常有用。

    所以我建议你把你的路由类型改为GET

    【讨论】:

      【解决方案2】:

      从我的角度来看,如果您将路由代码更改为类似于下面的代码,它将在 GET 和 POST 两种方法中正常工作。


      Route::any('concessions/search', 'ConcessionController@search')->name('concessions.search');
      

      【讨论】:

        猜你喜欢
        • 2019-03-02
        • 1970-01-01
        • 2015-07-23
        • 2021-06-08
        • 2018-01-28
        • 2013-03-21
        • 2018-03-23
        • 2017-11-02
        • 2018-06-22
        相关资源
        最近更新 更多