PHP实践:用ThinkPHP6完整实现用户分页功能

news2024/11/21 0:35:01

在这里插入图片描述

🏆作者简介,黑夜开发者,CSDN领军人物,全栈领域优质创作者✌,CSDN博客专家,阿里云社区专家博主,2023年6月CSDN上海赛道top4。
🏆数年电商行业从业经验,历任核心研发工程师,项目技术负责人。
🏆本文已收录于PHP专栏:PHP进阶实战教程。
🎉欢迎 👍点赞✍评论⭐收藏

文章目录

  • 🚀一、背景
  • 🚀二、功能实现
    • 🔎2.1 安装ThinkPHP6
    • 🔎2.2 创建数据库表和填充数据
    • 🔎2.3 创建控制器和路由
    • 🔎2.4 创建模型
    • 🔎2.5 创建视图
    • 🔎2.6 运行项目并测试
  • 🚀三、总结


🚀一、背景

分页功能在Web开发中是一个非常常见的需求,特别是在处理大量数据时,为了提高用户体验和性能,将数据分页展示是必不可少的。ThinkPHP6作为一款流行的PHP框架,自带了强大的分页功能,本文将详细介绍如何使用ThinkPHP6实现分页功能。

在这里插入图片描述

🚀二、功能实现

🔎2.1 安装ThinkPHP6

首先,你需要在你的开发环境中安装ThinkPHP6。可以通过Composer来安装,运行以下命令:

composer create-project topthink/think tp6 --prefer-dist

这将会在当前目录下创建一个名为tp6ThinkPHP6的项目。

🔎2.2 创建数据库表和填充数据

接下来,我们需要创建一个用于分页的数据表,并填充一些测试数据。

假设我们创建了一个名为users的表,包含以下字段:

  • id:主键,自增
  • name:姓名
  • age:年龄

你可以使用以下SQL语句来创建这个表:

CREATE TABLE `users` (
  `id` INT(11) PRIMARY KEY AUTO_INCREMENT,
  `name` VARCHAR(255),
  `age` INT(11)
);

然后,可以插入一些测试数据:

INSERT INTO `users` (`name`, `age`) VALUES ('Tom', 20), ('Jerry', 25), ('Alice', 30), ('Bob', 35), ('Eve', 40);

🔎2.3 创建控制器和路由

在ThinkPHP6中,控制器负责处理用户请求,并返回相应的数据或视图。我们需要创建一个控制器来实现分页功能。

首先,在app目录下创建一个名为controller的文件夹。然后在controller文件夹下创建一个名为UserController.php的文件。

UserController.php中,编写以下代码:

<?php

namespace app\controller;

use think\Controller;
use app\model\User;

class UserController extends Controller
{
    public function index()
    {
        $page = request()->param('page', 1); // 获取当前页码,默认为第一页
        $limit = 10; // 每页显示的记录数

        $users = User::paginate($limit, false, ['query' => request()->param()]);

        $this->assign('users', $users);

        return $this->fetch();
    }
}

在上面的代码中,我们通过User模型的paginate方法来获取分页数据。paginate方法接受三个参数:每页显示的记录数、是否使用简洁模式和额外的查询参数。我们使用request()->param()来获取当前请求的所有参数,并将其传递给paginate方法。

然后,我们需要在route目录下的route.php文件中定义路由规则。打开route.php,并添加以下代码:

use think\facade\Route;

Route::get('user', 'user/index');

上面的代码表示当用户访问/user时,将会调用UserControllerindex方法。

🔎2.4 创建模型

模型是用于操作数据库的核心部分,我们需要创建一个名为User.php的模型。

app目录下的model文件夹中,创建一个名为User.php的文件,并编写以下代码:

<?php

namespace app\model;

use think\Model;

class User extends Model
{
    protected $table = 'users';
}

上面的代码定义了User模型对应的数据表为users

🔎2.5 创建视图

最后,我们需要创建一个用于显示分页数据的视图。

app目录下的view文件夹中,创建一个名为user的文件夹。然后在user文件夹中创建一个名为index.html的文件。

打开index.html,并编写以下代码:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>User List</title>
</head>
<body>
    <h1>User List</h1>

    <table>
        <tr>
            <th>ID</th>
            <th>Name</th>
            <th>Age</th>
        </tr>
        {volist name='users' id='user'}
        <tr>
            <td>{$user.id}</td>
            <td>{$user.name}</td>
            <td>{$user.age}</td>
        </tr>
        {/volist}
    </table>

    {$users->render()}
</body>
</html>

上面的代码中,我们使用{volist}标签来遍历users数组,并将每个用户的idnameage显示在表格中。

最后一行代码$users->render()表示输出分页导航栏,用于用户切换不同的分页页码。

🔎2.6 运行项目并测试

到此为止,我们已经完成了ThinkPHP6的分页功能实现。现在,我们可以运行项目并访问/user来查看分页效果了。

在命令行中,进入项目根目录,并运行以下命令启动内置Web服务器:

php think run

然后,在浏览器中访问http://localhost:8000/user,你将会看到一个包含分页功能的用户列表页面。

尝试点击分页导航栏上的不同页码,可以看到数据随之更新。

在这里插入图片描述

🚀三、总结

本文详细介绍了如何使用ThinkPHP6实现分页功能。通过创建控制器、模型和视图,以及定义路由规则,我们成功地展示了分页的用户列表,提高了用户体验和性能。

如果你正在开发一个大型数据驱动的应用程序,ThinkPHP6的分页功能将会是你的得力助手。它简单易用,且功能强大,使得处理大量数据变得轻松愉快。

在这里插入图片描述

推荐您阅读本专栏其他内容,PHP进阶实战教程,相信不会让您失望。如果你对上面的功能有疑问,随时欢迎与我交流。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1275412.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

WPF Mvvm模式下面如何将事件映射到ViewModel层

前言 平常用惯了Command绑定,都快忘记传统的基于事件编程模式了,但是Commond模式里面有个明显的问题,就是你无法获取到事件源的参数。很多大聪明肯定会说,这还不简单,通过自己写控件,给控件加个自定义属性不就行了,想要啥事件就写啥事件进去,完全自主可控。但是对于写…

Day04:每日一题:2661. 找出叠涂元素

2661. 找出叠涂元素 给你一个下标从 0 开始的整数数组 arr 和一个 m x n 的整数 矩阵 mat 。 arr 和 mat 都包含范围 [1&#xff0c;m * n] 内的 所有 整数。从下标 0 开始遍历 arr 中的每个下标 i &#xff0c;并将包含整数 arr[i] 的 mat 单元格涂色。请你找出 arr 中在 mat…

【数电笔记】逻辑代数的基本定律、常用公式

说明&#xff1a; 笔记配套视频来源&#xff1a;B站 逻辑代数的基本定律 1. 常量间的运算 2. 逻辑变量与常量的运算 3. 与普通代数相似的定律 4. 摩根定律&#xff08;反演律&#xff09; 5. 等式证明方法例题 逻辑代数的常用公式 1. 吸收律 2. 冗余律 3. 示例应用 4. 关于异…

stm32的中断复习

(https://img-blog.csdnimg.cn/4fa918bc1ebb41118410bc9a41d4b296.jpg)

lxml 总结

xm 和 lxml库 哪个更好用点 1. 性能&#xff1a; lxml 通常比 xml.etree.ElementTree 更快。lxml 使用了 C 编写的底层解析器&#xff0c;因此在处理大型 XML 文档时可能更高效。 如果性能对你的应用很重要&#xff0c;特别是在处理大型 XML 文件时&#xff0c;选择 lxml 可能…

shell编程系列(9)-使用cut选择列

文章目录 前言使用cut选择列选择特定的列 结语 前言 前面的文章介绍了sed命令&#xff0c;sed可以帮我们处理文本列&#xff0c;这边文章介绍cut命令&#xff0c;cut命令可以帮我们选择想要的列&#xff0c;在文本处理时候结合sed命令&#xff0c;就可以精准定位了。 cut命令是…

前端面试高频考点—TCP vs UDP

目录 简介&#xff1a; 区别&#xff1a; 应用选择&#xff1a; tcp为什么需要三次握手&#xff1f; 简介&#xff1a; TCP(传输控制协议)和UDP&#xff08;用户数据报协议&#xff09; TCP是一种面向连接的、可靠的、基于字节流的传输层通信协议&#xff0c;是专门为了在不…

代码随想录算法训练营第三十六天| 435 无重叠区间 763 划分字母区间 56 合并区间

目录 435 无重叠区间 763 划分字母区间 56 合并区间 435 无重叠区间 将intervals数组按照左端点进行升序排序。 设置变量len标志此时新加入端点后所有区间的位置&#xff0c;将其赋初值为第一对区间的右端点&#xff0c;因为该点是一定可达的。设置变量res来存储需要移除空间…

【C语言】与文件有关的操作

目录 1. 前言2. 什么是文件&#xff1f;2.1 程序文件2.2 数据文件2.3 文件名 3. 二进制文件和文本文件&#xff1f;4. 文件的打开和关闭4.1 流和标准流4.1.1 流4.1.2 标准流 4.2 文件指针4.3 文件的打开和关闭 5. 文件的顺序读写5.1 顺序读写函数介绍5.2 对比一组函数 6. 文件的…

制作太阳能小车

今天偶然星期想搞一个太阳能小车耍一下子&#xff0c;那么接下来就介绍下相关的准备物品吧 首先介绍下需要准备的物品&#xff1a; 1、玩具车拆下四个轮子 2、小马达一个 3、1.5v太阳能板&#xff08;根据自己的需求购买相应的电压1.5v 3.7v 5v 12v等等&#xff09; 4、3D打…

Android Studio新版UI介绍

顶部菜单栏 左侧主要菜单入口项目名称分支名称 展开之后&#xff0c;主要功能与原来菜单栏功能一样&#xff0c;最大的变化就是把setting独立出去了。 而项目名称这里&#xff0c;展开就可以看到打开的历史工程列表&#xff0c;可以直接新建工程&#xff0c;原来需要在项目名称…

学习DNS

文章目录 一、DNS介绍二、DNS架构三、DNS的原理四、DNS软件安装和配置文件4.1、DNS正向解析4.2、DNS反向解析4.3、多域DNS4.4、DNS主从配置 一、DNS介绍 DNS&#xff08;Domain name system&#xff09;。 域名&#xff1a;由特定的格式组成&#xff0c;用来表示互联网中某一台…

[FUNC]判断窗口在哪一个屏幕上

#Requires AutoHotkey v2.0#z:: { ToolTip "Notepad窗口所在显示屏是&#xff1a;" GetMonitor() } GetMonitor() {CoordMode("Mouse", "Screen"); MouseGetPos &mx, &myWinGetPos &mx, &my,,,"ahk_class Notepad"…

记一次移动云不同机器下的对等网络使用

1、清单 机器1的VPC&#xff1a; 子网&#xff1a;172.16.16.0/24 机器2的VPC 子网&#xff1a;172.27.27.0/24&#xff08;子网不能与机器1的子网相同&#xff0c;否则对等网络无法成功建立&#xff09; 2、添加对等网络 添加链接&#xff1a;https://console.ecloud.1008…

二叉树展开为链表的三种写法

二叉树展开为链表 链表头节点法 新建一个树形链表&#xff0c;前序遍历这个树&#xff0c;遍历到一个节点就往里插 class Solution {TreeNode dummyNode new TreeNode(0,null,null);TreeNode p dummyNode;public void flatten(TreeNode root) {if(root null) return;//线序…

机器学习---EM算法

1. 极大似然估计与EM算法 极大似然估计是一种常用的参数估计方法&#xff0c;它是以观测值出现的概率最大作为准则。关于极 大似然估计&#xff0c;假设现在已经取到样本值了&#xff0c;这表明取到这一样本的概率L(θ) 比较 大。我们自然不会考虑那些不能使样本出现的θ作为…

Unity中Shader指令优化(编译后指令解析)

文章目录 前言一、我们先创建一个简单的Shader二、编译这个Shader&#xff0c;并且打开1、编译后注意事项2、编译平台 和 编译指令数3、顶点着色器用到的信息4、顶点着色器计算的核心部分5、片元着色器用到的信息6、片元着色器核心部分 前言 我们先读懂Shader编译后代码&#…

Pytorch——多卡GPU训练与单卡GPU训练相互切换

部分深度学习网络默认是多卡并行训练的&#xff0c;由于某些原因&#xff0c;有时需要指定在某单卡上训练&#xff0c;最近遇到一个&#xff0c;这里总结如下。 目录 一、多卡训练1.1 修改配置文件1.2 修改主训练文件1.3 显卡使用情况 二、单卡训练2.1 修改配置文件2.2 显卡使…

Linux 磁盘分区处理

最近实施过程中遇到客户提供给我们的服务器操作系统和Docke容器环境都已经安装完成&#xff0c;但磁盘的分区没有进行整理好。磁盘总共270G&#xff0c;系统安装分配了60G&#xff0c;剩余未创建分配需要处理。由于分区情况每家不一样&#xff0c;但大致流程都是相同的&#xf…

100.有序数组的平方(力扣)

代码解决一 class Solution { public:// 函数接受一个整数数组&#xff0c;返回每个元素平方值排序后的结果vector<int> sortedSquares(vector<int>& nums) {int len nums.size(); // 获取数组的长度vector<int> v; // 创建一个新的数组&#xff0c;用…