在 ThinkPHP 5.1 项目中创建一个新的模块

文章目录

  • 前言
    • [📦 ThinkPHP 模块结构](#📦 ThinkPHP 模块结构)
    • [🎯 创建新模块的步骤](#🎯 创建新模块的步骤)
    • [📝 更完整的模块示例](#📝 更完整的模块示例)
      • [1. 创建模型 `d:\php\ht\application\test\model\User.php`](#1. 创建模型 d:\php\ht\application\test\model\User.php)
      • [2. 创建控制器 `d:\php\ht\application\test\controller\User.php`](#2. 创建控制器 d:\php\ht\application\test\controller\User.php)
      • [3. 创建视图文件](#3. 创建视图文件)
    • [🔑 访问路径总结](#🔑 访问路径总结)
    • [⚠️ 注意事项](#⚠️ 注意事项)

前言


📦 ThinkPHP 模块结构

首先看看现有项目的结构:

复制代码
d:\php\ht\application\
├── admin/           ← 后台管理模块
│   ├── controller/   ← 控制器(处理请求)
│   ├── model/       ← 模型(操作数据库)
│   └── view/        ← 视图(显示页面)
│   └── config/      ← 模块配置
│
├── api/             ← API接口模块
│   ├── controller/
│   ├── model/
│   └── view/
│
└── chat/            ← 聊天模块

🎯 创建新模块的步骤

假设我们要创建一个 "Test" 测试模块

步骤1:在 application 目录下创建模块文件夹

d:\php\ht\application\ 下创建:

复制代码
test/                    ← 新模块目录
├── controller/          ← 控制器目录
├── model/               ← 模型目录
├── view/                ← 视图目录
│   └── test/            ← 视图子目录(与控制器对应)
│       └── index.html   ← 视图文件
└── config/             ← 模块配置目录

步骤2:创建控制器文件

d:\php\ht\application\test\controller\ 下创建 Index.php

php 复制代码
<?php
namespace app\test\controller;

use think\Controller;

class Index extends Controller
{
    // 首页方法
    public function index()
    {
        return $this->fetch();
    }
    
    // 欢迎方法
    public function hello($name = 'World')
    {
        return 'Hello, ' . $name . '!';
    }
}

步骤3:创建视图文件

d:\php\ht\application\test\view\test\ 下创建 index.html

html 复制代码
<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>Test 模块</title>
</head>
<body>
    <h1>欢迎来到 Test 模块!</h1>
    <p>这是我的第一个 ThinkPHP 模块</p>
</body>
</html>

步骤4:访问新模块

创建完成后,访问地址:

复制代码
http://flyenv-test-oqbbixhm.test/test          ← 访问 index 方法
http://flyenv-test-oqbbixhm.test/test/index    ← 同上
http://flyenv-test-oqbbixhm.test/test/hello    ← 访问 hello 方法

📝 更完整的模块示例

让我给你演示一个带完整功能的模块(增删改查):

1. 创建模型 d:\php\ht\application\test\model\User.php

php 复制代码
<?php
namespace app\test\model;

use think\Model;

class User extends Model
{
    // 设置表名(可选,默认会解析)
    protected $name = 'user';
    
    // 自动写入时间戳(可选)
    protected $autoWriteTimestamp = true;
}

2. 创建控制器 d:\php\ht\application\test\controller\User.php

php 复制代码
<?php
namespace app\test\controller;

use think\Controller;
use app\test\model\User as UserModel;

class User extends Controller
{
    // 用户列表页面
    public function lists()
    {
        // 查询所有用户
        $users = UserModel::select();
        
        // 分配给视图
        $this->assign('users', $users);
        
        // 渲染视图
        return $this->fetch();
    }
    
    // 添加用户表单页面
    public function add()
    {
        return $this->fetch();
    }
    
    // 处理添加用户
    public function doAdd()
    {
        // 获取POST数据
        $data = input('post.');
        
        // 创建用户
        $user = new UserModel();
        $user->save($data);
        
        // 返回成功
        return '用户添加成功!';
    }
    
    // 编辑用户
    public function edit($id)
    {
        // 查询用户
        $user = UserModel::find($id);
        
        // 分配给视图
        $this->assign('user', $user);
        
        return $this->fetch();
    }
    
    // 删除用户
    public function doDel($id)
    {
        UserModel::destroy($id);
        
        return '删除成功!';
    }
}

3. 创建视图文件

列表页 d:\php\ht\application\test\view\user\lists.html

html 复制代码
<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>用户列表</title>
</head>
<body>
    <h1>用户列表</h1>
    
    <a href="/test/user/add">添加用户</a>
    
    <table border="1">
        <tr>
            <th>ID</th>
            <th>用户名</th>
            <th>操作</th>
        </tr>
        <?php foreach($users as $user): ?>
        <tr>
            <td><?php echo $user['id']; ?></td>
            <td><?php echo $user['username']; ?></td>
            <td>
                <a href="/test/user/edit/id/<?php echo $user['id']; ?>">编辑</a>
                <a href="/test/user/doDel/id/<?php echo $user['id']; ?>">删除</a>
            </td>
        </tr>
        <?php endforeach; ?>
    </table>
</body>
</html>

添加页 d:\php\ht\application\test\view\user\add.html

html 复制代码
<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>添加用户</title>
</head>
<body>
    <h1>添加用户</h1>
    
    <form method="post" action="/test/user/doAdd">
        用户名:<input type="text" name="username"><br><br>
        密码:<input type="password" name="password"><br><br>
        <button type="submit">提交</button>
    </form>
</body>
</html>

🔑 访问路径总结

php 复制代码
┌────────────────────────────────────────────────────────┐
│  URL 路径              →  控制器        →  方法       │
├────────────────────────────────────────────────────────┤
│  /test                  →  Index      →  index()     │
│  /test/index            →  Index      →  index()     │
│  /test/user/lists       →  User       →  lists()    │
│  /test/user/add         →  User       →  add()      │
│  /test/user/doAdd       →  User       →  doAdd()     │
│  /test/user/edit/id/5   →  User       →  edit(id=5)  │
└────────────────────────────────────────────────────────┘

⚠️ 注意事项

  1. 控制器文件名必须和类名一致,且首字母大写
  2. 视图目录要和控制器名对应(User控制器 → view/user/)
  3. 视图文件要和控制器方法名对应(edit方法 → edit.html)
  4. 如果出现404,检查URL重写是否配置正确

相关推荐
码云数智-大飞17 小时前
PHP 接口开发规范:统一返回格式、异常处理与参数校验
开发语言·php
dadaobusi17 小时前
仿真边界处理
开发语言·php
微学AI20 小时前
内网穿透的应用-把飞牛NAS变成家庭录像中心:EasyNVR部署与远程回放实战
开发语言·php
峥嵘life20 小时前
Android WiFi连接过程 wpa_supplicant 日志分析
android·开发语言·php
weixin_BYSJ198720 小时前
「课设设计」springboot校园超市助购系统26449 (附源码)
java·javascript·spring boot·python·django·flask·php
xuefeiniao20 小时前
CentOS + 宝塔服务器偶发 SSH、面板、网站全部无法访问排查记录(PHP-FPM 内存耗尽案例)
服务器·centos·ssh·php
神州世通2 天前
解密企业通信安全防线:Avaya Aura 三层安全架构深度解析
开发语言·php
AC赳赳老秦2 天前
企业工商公开信息采集分析:OpenClaw 批量查询企业工商信息,生成企业画像报告
大数据·开发语言·python·自动化·php·deepseek·openclaw
AC赳赳老秦2 天前
司法公开数据采集应用:OpenClaw 抓取裁判文书公开信息,批量整理同类参考案例
java·大数据·python·数据挖掘·数据分析·php·openclaw
Vae_Mars2 天前
C#中多线程异步操作的方法-Parallel.ForEachAsync
开发语言·c#·php