Laravel,links()分页不支持GET方法

toiithl6  于 2023-04-22  发布在  其他
关注(0)|答案(1)|浏览(130)

当我处理一个搜索的帖子请求时,我得到的所有结果都是分页的,当我尝试导航到第二个页面http://localhost/project/admin/search?page=2时

该路由不支持GET方式,支持方式:POST.

links()函数使用GET来在页面中导航,我该如何解决?
路线:
Route::post('search',['as' => 'cat.search','uses' =>'CatController@search']);
功能:

public function search(Request $request)
    {
       
        $search = $request->get('search');
        if($search != ''){
            $cat =  Tombe::where('name','like', '%'.$search.'%')
            ->orwhere('description','like', '%'.$search.'%')
            ->paginate(15);
            if(count($cat)>0){
                return view('admin.cat.search', compact('cat'));
            }else{
                return back()->with('error','No results Found');
            }
        }else{
            return back()->with('error','Enter Search Name');
        }
    }
zwghvu4y

zwghvu4y1#

正如Tim刘易斯所指出的,paginator默认情况下处理GET请求。为了使其使用POST请求,您需要为Paginator的links()方法提供自定义视图,将每个<a>标记替换为<form>
例如,默认视图在the github repo沿着some others that use bootstrap or tailwind.中可见
如果你使用的不是laravel 10,只需更改分支。
如果你让laravel 10使用POST请求,它的默认分页会是这样的。
resources/views/pagination/using-post.blade.php

@if ($paginator->hasPages())
    <nav>
        <ul class="pagination">
            {{-- Previous Page Link --}}
            @if ($paginator->onFirstPage())
                <li class="disabled" aria-disabled="true" aria-label="@lang('pagination.previous')">
                    <span aria-hidden="true">&lsaquo;</span>
                </li>
            @else
                <li>
                    {{-- <a href="{{ $paginator->previousPageUrl() }}" rel="prev" aria-label="@lang('pagination.previous')">&lsaquo;</a> --}}
                    <form action="{{ $paginator->previousPageUrl() }}" method="POST">
                        @csrf
                        <button type="submit" aria-label="@lang('pagination.previous')">&lsaquo;</button>
                    </form>
                </li>
            @endif

            {{-- Pagination Elements --}}
            @foreach ($elements as $element)
                {{-- "Three Dots" Separator --}}
                @if (is_string($element))
                    <li class="disabled" aria-disabled="true"><span>{{ $element }}</span></li>
                @endif

                {{-- Array Of Links --}}
                @if (is_array($element))
                    @foreach ($element as $page => $url)
                        @if ($page == $paginator->currentPage())
                            <li class="active" aria-current="page"><span>{{ $page }}</span></li>
                        @else
                            {{-- <li><a href="{{ $url }}">{{ $page }}</a></li> --}}
                            <form action="{{ $url }}" method="POST">
                                @csrf
                                <button type="submit">{{ $page }}</button>
                            </form>
                        @endif
                    @endforeach
                @endif
            @endforeach

            {{-- Next Page Link --}}
            @if ($paginator->hasMorePages())
                <li>
                    {{-- <a href="{{ $paginator->nextPageUrl() }}" rel="next" aria-label="@lang('pagination.next')">&rsaquo;</a> --}}
                    <form action="{{ $paginator->nextPageUrl() }}" method="POST">
                        @csrf
                        <button type="submit" aria-label="@lang('pagination.next')">&rsaquo;</button>
                    </form>
                </li>
            @else
                <li class="disabled" aria-disabled="true" aria-label="@lang('pagination.next')">
                    <span aria-hidden="true">&rsaquo;</span>
                </li>
            @endif
        </ul>
    </nav>
@endif

然后,当您使用links()方法时,您需要将这个自定义分页视图传递给分页器。

<div class="container">
    @foreach ($users as $user)
        {{ $user->name }}
    @endforeach
</div>
 
{{ $users->links('pagination.using-post') }}

相关问题