Laravel项目中伪静态分页处理的示例分析

  介绍

这篇文章给大家分享的是有关Laravel项目中伪静态分页处理的示例分析的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。

下面由<强> Laravel 强教程栏目给大家介绍Laravel项目伪静态分页处理,,希望对需要的朋友有所帮助!

手上有个Laravel的项目,要求做伪静态处理,项目中使用了Laravel自带的分页组件,分页组件分页会在你的URL用查询的方式做页码的传递,达不到伪静态的要求。

想要的效果

我们伪静态想要的效果大体是这样的:

,/软件/3距离/created_at/第1页。html

对应Laravel的路由是:

/软件/{类别}/{秩序}/页}{页面。html

因为Laravel路由本身是支持路由参数的,所以说我们变量的获取是完全没有问题的,但是Laravel自带的分页组件会将你的参数用查询的方式做传递,所以生成的分页地址是下面这种

,/软件/3距离/created_at/页面- 1. - html ?类别=3 dmax&订单=created_at&页面=2

这不是我们需要的,所以我们需要对Laravel自带的分页组件进行修改。

Laravel分页组件

在Laravel中我们如果需要分页,会调用模型中的<代码> 标记方法,然后传递每页的页码。

<李>

<代码> 标记方法会调用<代码>照亮\数据库\担忧\ BuildsQueries> paginator 方法。

<李>

<代码> paginator 方法会构造一个<代码>照亮\分页\ LengthAwarePaginator> <李>

<代码>照亮\分页\ LengthAwarePaginator> 照亮\分页\ AbstractPaginator> 方法进行构造请求参数和url。

现在我们找到生成url的地方了,我们需要做的就是在这里修改。

重写分页组件

Laravel中本身支持自定义分页组件,但我们做的不是自定义分页,我们需要对于方法进行重写。

创建LengthAwarePaginator类

mkdir  app/分页/分页/LengthAwarePaginator touch 应用。php

文件app/分页/LengthAwarePaginator。php内容:

& lt; php ?      namespace 应用\分页;      use 阐明\ \ Arr的支持;   use 阐明\ \ Str的支持;   use 阐明\分页\ LengthAwarePaginator  as  BasePaginator;      class  LengthAwarePaginator  extends  BasePaginator   {   }

重写Url方法

首先Laravel自带的分页会把路由里面的参数放到查询中,我们需要的是参数还是放到地址中。

<李>

获取到所有的查询参数

<李>

判断需要分页的页面路由中是否有绑定的路由参数

<李>

如果没有的话,我们就走Laravel本身的分页

<李>

如果有的话,我们就通过路由和路由参数进行构建地址,并把它从查询参数中剔除

<李>

判断下当前的查询参数中是否还有参数,如果还有的话,我们就和之前一样。

修改程序/分页/LengthAwarePaginator。php下内容:

…      public  function  url(页面)   ,,,{   ,,,,,,,if  (page 美元;& lt;=, 0), {   ,,,,,,,,,,,page 美元;=,1;   ,,,,,,,}      ,,,,,,,parameters 美元;=,($ this→pageName =祝辞,美元页面);      ,,,,,,,if  (count ($ this→查询),祝辞,0),{   ,,,,,,,,,,,parameters 美元;=,array_merge美元($ this→查询,,参数);   ,,,,,,,}      ,,,,,,,//判断的参数是否在,路由中,需要绑定的数据   ,,,,,,,params 美元;=,()→\请求路线()→参数();      ,,,,,,,if (!空(params)美元),{   ,,,,,,,,,,,foreach  (parameters 美元;as  key 美元;=祝辞,美元参数),{   ,,,,,,,,,,,,,,,if (收取(params [$ key])美元),{   ,,,,,,,,,,,,,,,,,,,美元params [$ key],=,美元参数;   ,,,,,,,,,,,,,,,,,,,设置参数($(美元关键));   ,,,,,,,,,,,,,,,}   ,,,,,,,,,,,}      ,,,,,,,,,,,path 美元;=,路线(路线\请求()→()→getAction(& # 39;作为# 39;),,美元params);   ,,,,,,,},{else    ,,,,,,,,,,,path 美元;=,$ this→路径;   ,,,,,,,}      ,,,,,,,//,判断是否有参数   ,,,,,,,if (空(加勒比海盗:查询(参数)美元)),{   ,,,,,,,,,,,return  path 美元;只$ this→buildFragment ();   ,,,,,,,}      ,,,,,,,return  $路径   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null

Laravel项目中伪静态分页处理的示例分析