关于 Laravel 项目 伪静态分页处理

                                                       

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

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

想要的效果

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

 /software/3dmax/created_at/page-1.html

对应 Laravel 的路由是:

/software/{category}/{order}/page-{page}.html

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

 /software/3dmax/created_at/page-1.html?category=3dmax&order=created_at&page=2

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

Laravel 分页组件

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

paginate 方法会调用 IlluminateDatabaseConcernsBuildsQueries 下的paginator方法。paginator 方法会构造一个 IlluminatePaginationLengthAwarePaginator的实例。IlluminatePaginationLengthAwarePaginator 会使用 IlluminatePaginationAbstractPaginator 中的url方法进行构造请求参数和url。

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

重写分页组件

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

创建 LengthAwarePaginator 类

mkdir app/Paginationtouch app/Pagination/LengthAwarePaginator.php

文件 app/Pagination/LengthAwarePaginator.php 内容:

Unreal Images Unreal Images

免费的AI图片库

Unreal Images 53 查看详情 Unreal Images

<?phpnamespace AppPagination;use IlluminateSupportArr;use IlluminateSupportStr;use IlluminatePaginationLengthAwarePaginator as BasePaginator;class LengthAwarePaginator extends BasePaginator{}

重写 Url 方法

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

获取到所有的 query 参数判断需要分页的页面路由中是否有绑定的路由参数如果没有的话,我们就走 Laravel 本身的分页如果有的话,我们就通过路由和路由参数进行构建地址,并把它从 query 参数中剔除判断下当前的 query 参数中是否还有参数,如果还有的话,我们就和之前一样。

修改 app/Pagination/LengthAwarePaginator.php下内容:

...public function url($page)    {        if ($page pageName => $page];        if (count($this->query) > 0) {            $parameters = array_merge($this->query, $parameters);        }        //判断的参数是否在 路由中 需要绑定的数据        $params = request()->route()->parameters();        if (!empty($params)) {            foreach ($parameters as $key => $parameter) {                if (isset($params[$key])) {                    $params[$key] = $parameter;                    unset($parameters[$key]);                }            }            $path = route(request()->route()->getAction('as'), $params);        } else {            $path = $this->path;        }        // 判断是否有参数        if (empty(Arr::query($parameters))) {            return $path . $this->buildFragment();        }        return $path            . (Str::contains($this->path, '?') ? '&' : '?')            . Arr::query($parameters)            . $this->buildFragment();    }    ...

使用自定义的分页组件

在 Laravel 中我们如果需要分页,会调用 模型中的 paginate 方法,但是paginate方法的定义在IlluminateDatabaseEloquentBuilder下,如果我们需要重写的话,会很麻烦,并且还有一个问题就是,并不是我们所有的分页都是需要伪静态的,比如我们用户中心的数据可能不太需要伪静态。所以我们需要一个可以手动设置的东西,Larave 模型中有一个 本地作用域,我们可以写一个方法staticPaginate,当需要使用静态分页的时候,我们可以Model->query()->staticPaginate(); 来调用,所需要的参数和 Laravel 自带的 pageinage 方法类似。

公共的Model 基类文件

Laravel项目中的 Model 我们一般不会直接继承IlluminateDatabaseEloquentModel 我们一般都在 appModels 目录定义一个 Model  基类,所有的模型都继承自 Model 基类,这并不是必须的,只是这样的话对于模型修改,或添加公共的方法比较方便。

在模型中定义本地作用域

你只需要拷贝 IlluminateDatabaseEloquentBuilder下的paginate方法的内容并修改$this的指向就可以了

...use IlluminatePaginationPaginator;# Laravel 自带的。use IlluminateContractsPaginationLengthAwarePaginator;...   /**     * 自定义静态分页     * @author kingofzihua     * @param Builder $builder     * @param int $perPage     * @param array $columns     * @param string $pageName     * @param int|null $page     * @return LengthAwarePaginator     *     * @throws InvalidArgumentException     */    public function scopeStaticPaginate($builder, $perPage = null, $columns = ['*'], $pageName = 'page', $page = null)    {        if (request('page')) {            request()->offsetSet('page', request('page'));        }        $page = $page ?: Paginator::resolveCurrentPage($pageName);        $perPage = $perPage ?: $builder->getModel()->getPerPage();        $results = ($total = $builder->toBase()->getCountForPagination())            ? $builder->forPage($page, $perPage)->get($columns)            : $builder->getModel()->newCollection();        return $this->paginator($results, $total, $perPage, $page, [            'path' => Paginator::resolveCurrentPath(),            'pageName' => $pageName,        ]);    }    ...

替换自定义的分页组件

# 替换use AppPaginationLengthAwarePaginator;# --- use  IlluminateContractsPaginationLengthAwarePaginator;  // 注释...   /**     *     * @param IlluminateSupportCollection $items     * @param int $total     * @param int $perPage     * @param int $currentPage     * @param array $options     * @return LengthAwarePaginator     */    protected function paginator($items, $total, $perPage, $currentPage, $options)    {        return Container::getInstance()->makeWith(LengthAwarePaginator::class, compact(            'items', 'total', 'perPage', 'currentPage', 'options'        ));    }    ...

在项目中使用静态分页组件

Model::query()->staticPaginate($pageSize);

以上就是关于 Laravel 项目 伪静态分页处理的详细内容,更多请关注创想鸟其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/730780.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
UC浏览器在线网页版登录 UC浏览器官网直达链接
上一篇 2025年11月25日 11:12:43
PHP怎么写接口_使用PHP开发RESTful接口的常见问题解答
下一篇 2025年11月25日 11:12:44

相关推荐

  • 电脑主机显卡散热改造教程,提高显卡散热性能延长使用寿命

    电脑主机显卡散热改造教程,提高显卡散热性能延长使用寿命电脑主机显卡散热改造教程,提高显卡散热性能延长使用寿命电脑主机显卡散热改造教程,提高显卡散热性能延长使用寿命电脑主机显卡散热改造教程,提高显卡散热性能延长使用寿命

    更换导热硅脂、改进风扇配置与风道设计、优化机箱整体散热环境可有效提升显卡散热性能。1. 更换高质量导热硅脂,如信越7921或thermal grizzly,清理原有硅脂并均匀涂抹薄层;2. 加装或更换高性能风扇、采用垂直安装方式以优化风道;3. 增加机箱风扇数量、定期清灰、使用冷排辅助降温,并确保机…

    2026年8月26日 用户投稿
    100
  • DeepSeek联合清华大学发表论文 旨在提高AI模型效率

    ☞☞☞AI 智能聊天, 问答助手, AI 智能搜索, 免费无限量使用 DeepSeek R1 模型☜☜☜ DeepSeek携手清华大学,致力于降低人工智能(AI)模型训练成本,从而减少运营支出。 DeepSeek 一月份发布的低成本推理模型引发业界关注。该公司与北京大学研究人员合作,发表论文阐述了一…

    2026年8月26日
    000
  • Python爬虫抓取智联招聘(基础版)

    Python爬虫抓取智联招聘(基础版)Python爬虫抓取智联招聘(基础版)Python爬虫抓取智联招聘(基础版)Python爬虫抓取智联招聘(基础版)

    运行平台: WindowsPython版本: Python3.6IDE: Sublime Text其他工具: Chrome浏览器 1、网页分析 1.1 分析请求地址 以北京海淀区的Python工程师为例进行网页分析。打开智联招聘首页,选择北京地区,在搜索框输入”Python工程师&#82…

    2026年8月26日 用户投稿
    000
  • NekoAnime番剧全集在线平台 NekoAnime免费高清观看网址入口

    NekoAnime番剧全集在线平台是http://nekodm.com/,该网站提供日漫、国漫等多地区高清资源,支持全集观看、多清晰度选择及个性化功能。 NekoAnime番剧全集在线平台在哪里?这是不少网友都关注的,接下来由PHP小编为大家带来NekoAnime免费高清观看网址入口,感兴趣的网友一…

    2026年8月26日
    000
  • 如何解决MP3元数据提取难题!wapmorgan/mp3info助你优化PHP音频处理效率

    Composer在线学习地址:学习地址 最近,我正在为一个雄心勃勃的项目构建一个在线音乐播放和管理平台。其中一个核心功能是:当用户上传mp3文件后,我需要自动提取并展示这些歌曲的详细信息,比如歌曲名、艺术家、专辑、发布年份、歌曲时长,甚至专辑封面。想象一下,如果每次用户上传都需要人工填写这些信息,那…

    用户投稿 2026年8月26日
    200
  • Java中DatagramPacket的作用 解析UDP数据包

    Java中DatagramPacket的作用 解析UDP数据包Java中DatagramPacket的作用 解析UDP数据包Java中DatagramPacket的作用 解析UDP数据包Java中DatagramPacket的作用 解析UDP数据包

    datagrampacket的主要作用是封装udp数据报,用于发送和接收数据。它包含数据、目标或来源地址信息,是java udp编程的核心类。发送数据时需创建datagrampacket对象并调用send()方法;接收数据时需创建缓冲区并通过receive()方法获取数据。关键方法包括构造函数、ge…

    2026年8月26日 用户投稿
    200
  • Java中ZIP怎么处理 详解ZIP压缩解压的API

    Java中ZIP怎么处理 详解ZIP压缩解压的APIJava中ZIP怎么处理 详解ZIP压缩解压的APIJava中ZIP怎么处理 详解ZIP压缩解压的APIJava中ZIP怎么处理 详解ZIP压缩解压的API

    java中处理zip压缩解压主要依赖java.util.zip包,其核心在于理解如何遍历zip条目并正确读写数据。1. 使用zipinputstream解压:创建实例并传入fileinputstream,循环调用getnextentry()获取每个zipentry,通过getinputstream(…

    2026年8月26日 用户投稿
    000
  • 技嘉主机CPU风扇转速异常怎么办?如何调整主机散热风扇转速?

    技嘉主机CPU风扇转速异常怎么办?如何调整主机散热风扇转速?技嘉主机CPU风扇转速异常怎么办?如何调整主机散热风扇转速?技嘉主机CPU风扇转速异常怎么办?如何调整主机散热风扇转速?技嘉主机CPU风扇转速异常怎么办?如何调整主机散热风扇转速?

    技嘉主机cpu风扇转速异常的解决方法如下:1. 进入bios/uefi设置进行调整,重启电脑并按del键进入bios界面,找到风扇控制选项,选择normal、silent、full speed或manual模式进行设置,保存并退出;2. 使用技嘉官方软件如easytune或siv,在windows系…

    2026年8月26日 用户投稿
    200
  • 零安装割草时代,库犸Mammotion发布三目视觉割草机器人

    近日,全球智能庭院机器人领军品牌库犸科技(mammotion)正式发布全新力作——yukaminivision。这款搭载自研视觉感知系统的纯视觉导航割草机器人,突破性地摆脱了传统设备对预埋边界线、rtk基站和预先建图的依赖,首次实现“零安装”智能作业模式:用户只需将机器放置于草坪,开机后即可自动开始…

    2026年8月26日
    200
  • 网易云音乐官网版入口-网易云音乐数据中心官网登录入口​

    网易云音乐官网入口为https://music.163.com/,进入后点击右上角“登录”按钮,可选择手机号或网易邮箱账号输入密码登录,成功后即可访问个人音乐库,平台提供海量歌曲、个性化歌单、音乐社区、智能推荐及跨设备同步功能,特色服务包括主题音乐活动、高音质选项、独立音乐人作品、同步歌词及用户互动…

    2026年8月26日
    100
  • 在PHP中高效管理异步操作:告别回调地狱,使用guzzlehttp/promises优雅地处理并发任务

    可以通过一下地址学习composer:学习地址 告别漫长等待:PHP异步编程的痛点与挑战 想象一下这样的场景:你正在开发一个电商网站的订单处理系统。用户下单后,系统需要完成一系列操作: 调用第三方物流API创建运单。发送邮件通知用户订单已确认。更新库存。将订单数据同步到数据分析平台。 如果这些操作都…

    用户投稿 2026年8月26日
    100
  • 在java中什么是类什么是对象 类与对象的区别和联系

    类和对象是java中面向对象编程的核心概念。类是模板,定义了属性和方法;对象是类的实例,具有具体的值和行为。类与对象的关系类似于剧本和演员:类是剧本,定义了角色的行为和特征;对象是根据剧本上演的具体演员。 在Java中,类和对象是面向对象编程的核心概念。让我来详细解释一下什么是类,什么是对象,以及它…

    2026年8月26日
    100
  • linux下php的安装目录在哪

    linux下php的安装目录一般在/etc/下。如果php是以源码方式安装的,那么php的安装目录在/usr/local/lib下,此时,php的配置文件在/usr/local/lib/php.ini。 如果采用RPM包安装,安装路径应在 /etc/目录下; (推荐教程:linux教程) php的配…

    2026年8月26日
    000
  • 告别递归查询噩梦:如何使用previousnext/nested-set和Composer优雅管理PHP树形数据

    可以通过一下地址学习composer:学习地址 树形数据的烦恼:传统方法为何力不从心? 相信很多 php 开发者都遇到过这样的场景:你需要在一个数据库中存储具有层级关系的数据,比如一个多级分类系统、一个文件目录结构,或者一个组织内的部门层级。最直观的实现方式,莫过于在每个记录中添加一个 parent…

    用户投稿 2026年8月26日
    000
  • Java中如何生成测试数据 掌握Faker库

    Java中如何生成测试数据 掌握Faker库Java中如何生成测试数据 掌握Faker库Java中如何生成测试数据 掌握Faker库Java中如何生成测试数据 掌握Faker库

    在java中生成测试数据最方便的方法是使用faker库。1. faker是一个强大的java库,用于生成姓名、地址、电话号码等多种类型的伪造数据;2. 使用时需先在maven或gradle中添加对应依赖;3. 初始化faker实例后,可调用其方法快速生成各类数据;4. 支持自定义生成规则及设置不同l…

    2026年8月26日 用户投稿
    000
  • 先进算力新选择|2025华为算力场景发布会暨北京xPN伙伴大会即将举行

    当前,以人工智能为引领的新一轮科技革命与产业变革正在深度重构全球产业格局。随着大模型技术的迅猛发展,各行各业正加速挺进数智化转型的深水区。在这一变革浪潮中,算力作为数字经济的核心驱动力,其战略意义已超越传统技术范畴,成为重塑产业生态的关键要素。据权威第三方咨询机构预测,2025年中国区ai相关ict…

    2026年8月26日
    000
  • PHP数据更新怎么实现_PHPMySQL数据更新操作方法指南

    答案:使用预处理语句可有效防止SQL注入。通过将SQL结构与数据分离,数据库先解析语句结构,再绑定用户输入作为纯值处理,避免其被当作代码执行,从而杜绝注入风险,是安全更新数据的核心方法。 PHP更新MySQL数据,核心在于构建正确的SQL UPDATE语句,并借助mysqli或PDO这类数据库扩展安…

    2026年8月26日
    000
  • 电脑主机机箱风扇噪音减小方法分享,打造安静舒适的使用环境

    电脑主机机箱风扇噪音减小方法分享,打造安静舒适的使用环境电脑主机机箱风扇噪音减小方法分享,打造安静舒适的使用环境电脑主机机箱风扇噪音减小方法分享,打造安静舒适的使用环境电脑主机机箱风扇噪音减小方法分享,打造安静舒适的使用环境

    电脑主机风扇噪音大可通过清理灰尘、检查风扇状态、优化控制设置及改善风道设计来解决。1. 定期清理cpu散热器、显卡风扇和电源风扇等积灰,提升散热效率;2. 更换老化或轴承松动的风扇,选用静音型号并确保安装稳固;3. 进入bios或使用主板软件调整风扇曲线,设定低转速模式以降低噪音;4. 优化机箱风道…

    2026年8月26日 用户投稿
    200
  • 电脑主机内存频率与时序详解,帮助用户了解内存性能指标及调整方法

    电脑主机内存频率与时序详解,帮助用户了解内存性能指标及调整方法电脑主机内存频率与时序详解,帮助用户了解内存性能指标及调整方法电脑主机内存频率与时序详解,帮助用户了解内存性能指标及调整方法电脑主机内存频率与时序详解,帮助用户了解内存性能指标及调整方法

    内存性能要看频率与时序的平衡。频率决定数据传输速度上限,但实际表现受时序影响,高频内存若时序过松,延迟可能与低频内存相近;选择内存应先看主板支持频率,搭配合适cpu平台,同频选cl值更低的产品;时序以cl值为核心,数值越低延迟越小,游戏场景更受益于低时序,而多任务处理则更依赖高频带来的带宽优势;调整…

    2026年8月26日 用户投稿
    000
  • 80 PLUS 认证等级背后的真相:转换效率与纹波测试

    80 PLUS认证衡量电源转换效率,等级越高效率越高,从白牌到钛金牌及新增红宝石标准,要求逐步提升,其中红宝石在50%负载下效率需达96.5%以上;高效率降低能耗与发热,延长硬件寿命。同时,纹波测试评估输出稳定性,+12V纹波应低于120mV,优质电源纹波更低,确保系统稳定运行。高效与低纹波结合,提…

    2026年8月26日
    000

发表回复

登录后才能评论
关注微信