如何从laravel分页的第一页中删除查询字符串页面?

Sai*_*akR 6 php pagination laravel laravel-5 laravel-5.4

我正在使用分页,如下所示:

public function index()
    {
        $jobs = Job::paginate(5);
        return view('job.index', compact('jobs'));
    }
Run Code Online (Sandbox Code Playgroud)

在视图中:

{{ $jobs->links() }}
Run Code Online (Sandbox Code Playgroud)

存在生成两个典型页面的问题:/job并且/job?page=1两个页面具有相同的内容。

我想做任何page从分页首页上删除查询字符串的事情。

我尝试了以下方法:

if ($jobs->onFirstPage()){
  $jobs->setPageName('');
} 
Run Code Online (Sandbox Code Playgroud)

但这破坏了分页,即页面链接未正确加载,并且所有页面的查询字符串值均保持不变。

Sai*_*akR 7

我发现此问题的有效解决方案是编辑分页模板

首先使用以下命令从项目根目录发布供应商的分页模板:

php artisan vendor:publish --tag=laravel-pagination
Run Code Online (Sandbox Code Playgroud)

现在resources/views/vendor/pagination/default.blade.php应该找到一个文件 at并且可以像下面这样编辑它,使用str_replace()每个页面的 url 和后退导航按钮:

<li><a href="{{str_replace('?page=1','',$paginator->previousPageUrl())}}" title="{{__('Previous')}}" rel="prev">{{$foxPrev}}</a></li>
Run Code Online (Sandbox Code Playgroud)

 <li><a href="{{str_replace('?page=1','',$url)}}">{{ $page }}</a></li>
Run Code Online (Sandbox Code Playgroud)

更新:

发现一个错误,?page=10而不是使用str_replace我们应该使用preg_replace如下:

<li><a href="{{preg_replace('/\?page=[1]$/','',$url)}}">{{ $page }}</a></li>
Run Code Online (Sandbox Code Playgroud)

更新 2:

如果对页码参数使用除 之外的任何自定义名称page,我们可以在分页模板中使用$pageName属性的分页器 getter,如下所示:

<li><a href="{{preg_replace('/\?'.$paginator->getPageName().'=[1]$/','',$url)}}">{{ $page }}</a></li>
Run Code Online (Sandbox Code Playgroud)

要了解有关如何在同一页面上使用多个分页或如何$pageName从视图自定义页码参数的更多信息,请查看此答案

  • 谢谢你!但我认为这样更好;`&lt;li class="page-item"&gt;&lt;a class="page-link" href="{{ preg_replace('/(\?|\&amp;)page=[1]$/','',$url ) }}"&gt;{{ $page }}&lt;/a&gt;&lt;/li&gt;` (2认同)