杰瑞科技汇

ThinkPHP3.2教程适合新手入门吗?

ThinkPHP 3.2 完整入门教程

目录

  1. 第一部分:ThinkPHP 3.2 简介

    ThinkPHP3.2教程适合新手入门吗?-图1
    (图片来源网络,侵删)
    • 什么是 ThinkPHP?
    • 为什么选择 ThinkPHP 3.2?
    • MVC 架构思想
  2. 第二部分:开发环境搭建

    • 必备软件
    • 集成环境推荐
    • 创建第一个项目
  3. 第三部分:项目结构详解

    • 目录结构一览
    • 核心目录介绍
  4. 第四部分:MVC 入门

    • M (Model) - 模型:数据库操作
    • V (View) - 视图:模板展示
    • C (Controller) - 控制器:业务逻辑
  5. 第五部分:核心功能详解

    ThinkPHP3.2教程适合新手入门吗?-图2
    (图片来源网络,侵删)
    • 配置:如何修改和应用配置
    • 路由:URL 访问规则
    • 数据 CURD:增删改查操作
    • 数据验证:表单数据验证
    • Session 和 Cookie:用户状态管理
  6. 第六部分:实战案例 - 留言板系统

    • 需求分析
    • 数据库设计
    • 功能实现(列表、添加、删除)
    • 完整代码示例
  7. 第七部分:部署与总结

    • 项目部署到服务器
    • ThinkPHP 3.2 的优缺点
    • 学习资源

第一部分:ThinkPHP 3.2 简介

什么是 ThinkPHP?

ThinkPHP 是一个免费、开源、快速、简单的面向对象的轻量级 PHP 开发框架,遵循 Apache2.0 协议发布,它是为了简化企业级应用开发和敏捷 Web 应用开发而诞生的。

为什么选择 ThinkPHP 3.2?

  • 文档丰富:3.2 版本拥有非常详尽的官方文档和社区教程,遇到问题容易找到答案。
  • 稳定成熟:经过多年发展,3.2 版本非常稳定, bug 较少,适合商业项目。
  • 中文友好:由国人开发,对中文编码、分页等支持极佳,文档和社区交流均为中文。
  • “傻瓜式”开发:提供了大量便捷的函数和封装,让开发者能快速上手,专注于业务逻辑。

MVC 架构思想

ThinkPHP 遵循经典的 MVC 设计模式,将应用分为三个部分:

ThinkPHP3.2教程适合新手入门吗?-图3
(图片来源网络,侵删)
  • Model (模型):负责与数据库交互,处理业务数据。
  • View (视图):负责数据显示,通常是 HTML 模板文件。
  • Controller (控制器):接收用户请求,调用模型处理数据,并选择合适的视图进行展示。

流程:用户请求 -> 控制器 -> 模型 -> 数据库 -> 模型 -> 控制器 -> 视图 -> 用户。


第二部分:开发环境搭建

必备软件

  • PHP 环境:ThinkPHP 3.2 要求 PHP 版本为 5.3+,推荐使用 PHP 5.4 或 5.6。
  • Web 服务器:如 Apache 或 Nginx。
  • 数据库:如 MySQL 5.0+。
  • 代码编辑器:如 VS Code, Sublime Text, PhpStorm 等。

集成环境推荐

为了方便开发,强烈推荐使用集成环境,它们已经配置好了 PHP, Apache/Nginx, MySQL 等环境。

创建第一个项目

  1. 下载 ThinkPHP 3.2 核心库:https://github.com/top-think/thinkphp
  2. 将下载的 ThinkPHP 文件夹解压,并将其重命名为你的项目名,myapp
  3. myapp 文件夹放到你的 Web 服务器根目录下(如 phpStudy 的 WWW 目录)。
  4. 配置虚拟主机或修改 hosts 文件,确保可以通过 http://localhost/myapp 访问。
  5. 在浏览器中访问 http://localhost/myapp
  6. 如果看到 ThinkPHP 的欢迎页面,说明环境配置成功!首次访问会自动生成必要的目录结构。

第三部分:项目结构详解

访问成功后,你的 myapp 目录下会自动生成以下结构:

myapp/
├─Application/           // 应用目录
│  ├─Common/            // 公共模块
│  ├─Home/              // 默认 Home 模块
│  │  ├─Common/         // Home 模块公共函数
│  │  ├─Conf/           // Home 模块配置文件
│  │  ├─Controller/     // Home 模块控制器
│  │  └─View/           // Home 模块视图
│  └─Admin/             // Admin 模块(示例)
├─Public/               // 对外访问目录
│  ├─index.php          // 入口文件
│  ├─static/            // 静态资源目录
│  └─uploads/           // 上传文件目录
├─ThinkPHP/             // ThinkPHP 核心目录
├─Uploads/              // 上传文件目录(根级)
└─.htaccess             // Apache URL 重写规则

核心目录介绍:

  • Application/:你的应用主目录,所有业务代码都在这里。
  • Application/Home/:默认的前台模块。
    • Controller/:放控制器类文件,如 IndexController.class.php
    • View/:放视图模板文件,如 index.html
    • Conf/:模块级的配置文件,如 config.php
  • Public/:Web 服务器指向的目录,存放入口文件和静态资源(CSS, JS, 图片)。
  • ThinkPHP/:框架核心,不要修改这里的文件。
  • index.php (在 Public 目录下):整个应用的唯一入口文件。

第四部分:MVC 入门

C (Controller) - 控制器

控制器是连接模型和视图的桥梁。

步骤:

  1. Application/Home/Controller/ 目录下创建一个文件,HelloController.class.php
  2. 编写代码:
<?php
namespace Home\Controller;
use Think\Controller; // 引入父类控制器
class HelloController extends Controller {
    public function sayHello($name = 'ThinkPHP') {
        // 向视图传递数据
        $this->assign('name', $name);
        // 指定视图文件
        // ThinkPHP 会自动在 View/Home/ 目录下寻找 sayHello.html
        $this->display();
    }
}
  1. 访问这个方法:http://localhost/myapp/index.php/Home/Hello/sayHello/name/World
    • Home:模块名
    • Hello:控制器名
    • sayHello:方法名
    • name/World:传递的参数

V (View) - 视图

视图负责展示数据,通常使用模板语法。

  1. Application/Home/View/Hello/ 目录下创建 sayHello.html 文件。
  2. 编写代码:
<!DOCTYPE html>
<html>
<head>你好,{$name}!</title>
</head>
<body>
    <h1>{$name}</h1>
    <p>欢迎使用 ThinkPHP 3.2!</p>
</body>
</html>
  • {$name} 是 ThinkPHP 的模板语法,用于接收控制器中通过 assign() 传递过来的 $name 变量。

M (Model) - 模型

模型负责与数据库交互,ThinkPHP 提供了强大的 M() 函数和 Model 类来简化数据库操作。

假设我们有一个 tp_user 表:

CREATE TABLE `tp_user` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `username` varchar(50) NOT NULL,
  `email` varchar(100) NOT NULL,
  `create_time` int(11) DEFAULT NULL,
  PRIMARY KEY (`id`)
);

使用 M() 函数(推荐,无需创建模型类):

// 在控制器中
public function userList() {
    // 实例化一个 User 模型 (对应 tp_user 表)
    $User = M('User');
    // 查询数据
    // 1. 查询所有数据
    $list = $User->select();
    // 2. 查询条件
    // $user = $User->where('id=1')->find();
    // 3. 查询并分页
    // $page = $User->page($_GET['p'].',10')->select();
    // $this->assign('list', $list);
    // $this->display();
}

第五部分:核心功能详解

配置

  • 项目级配置:修改 Application/Common/Conf/convention.php 或新建 Application/Common/Conf/config.php
  • 模块级配置:在对应模块的 Conf/ 目录下创建 config.php
  • 动态配置:在控制器中可以使用 C() 函数。

示例:

// 在模块配置文件 Application/Home/Conf/config.php 中
return array(
    'DB_TYPE'   => 'mysql',     // 数据库类型
    'DB_HOST'   => 'localhost', // 服务器地址
    'DB_NAME'   => 'myapp',     // 数据库名
    'DB_USER'   => 'root',      // 用户名
    'DB_PWD'    => 'root',      // 密码
    'DB_PREFIX' => 'tp_',       // 数据库表前缀
);

路由

ThinkPHP 3.2 默认是 Pathinfo 模式的 URL,已经非常友好,可以通过 URL_MODEL 配置项来改变。

  • URL_MODEL => 0: 普通模式 index.php?m=home&c=user&a=add
  • URL_MODEL => 1: Pathinfo 模式 index.php/Home/User/add (默认)
  • URL_MODEL => 2: Rewrite 模式 (需要服务器配置 .htaccess 支持) /Home/User/add

数据 CURD

  • Create (创建):
    $User = M('User');
    $data['username'] = 'test';
    $data['email'] = 'test@example.com';
    $User->add($data); // 返回新插入数据的ID
  • Read (读取):
    $User = M('User');
    // 查询单条
    $user = $User->find(1); // 根据主键查
    // 查询多条
    $list = $User->where('status=1')->order('id DESC')->select();
  • Update (更新):
    $User = M('User');
    $data['id'] = 1;
    $data['username'] = 'new_name';
    $User->save($data); // 根据主键更新
  • Delete (删除):
    $User = M('User');
    $User->delete(1); // 删除 id=1 的记录
    $User->where('status=0')->delete(); // 批量删除

数据验证

在模型类中定义 _validate 属性。

// Application/Home/Model/UserModel.class.php
<?php
namespace Home\Model;
use Think\Model;
class UserModel extends Model {
    // 定义验证规则
    protected $_validate = array(
        // array(验证字段, 规则, 错误提示, 验证条件, 验证时间)
        array('username', 'require', '用户名不能为空!', 1), // 必填
        array('username', '', '用户名已经存在!', 1, 'unique', 1), // 唯一
        array('email', 'email', '邮箱格式不正确!', 2), // 邮箱格式
    );
}
// 在控制器中使用
$User = D('User'); // 使用 D 函数会自动验证
if (!$User->create()) {
    // 如果创建失败,表示验证没有通过,输出错误提示信息
    exit($User->getError());
}
// 验证通过,继续执行...

Session 和 Cookie

  • Session:

    // 设置
    session('user_id', 1);
    session('user_info', array('name' => 'Tom'));
    // 获取
    $userId = session('user_id');
    $userInfo = session('user_info');
    // 删除
    session('user_id', null); // 删除单个
    session(null); // 清空所有
  • Cookie:

    // 设置 (名称, 值, 有效期(秒), 路径, 域名)
    cookie('name', 'value', 3600);
    // 获取
    $value = cookie('name');
    // 删除
    cookie('name', null);

第六部分:实战案例 - 留言板系统

需求分析

  • 留言列表页:显示所有留言,包含内容和发布时间。
  • 添加留言页:一个表单,用于提交新留言。

数据库设计

CREATE TABLE `tp_message` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `content` text NOT NULL,
  `create_time` int(11) DEFAULT NULL,
  PRIMARY KEY (`id`)
);

功能实现

步骤 1:创建控制器 MessageController.class.php

<?php
namespace Home\Controller;
use Think\Controller;
class MessageController extends Controller {
    // 显示留言列表
    public function index() {
        $Message = M('Message');
        // 按创建时间倒序排列
        $list = $Message->order('id DESC')->select();
        $this->assign('list', $list);
        $this->display();
    }
    // 处理留言提交
    public function add() {
        if (IS_POST) {
            $Message = D('Message');
            if ($Message->create()) {
                // 自动填充创建时间
                $Message->create_time = time();
                if ($Message->add()) {
                    $this->success('留言成功!', U('index'));
                } else {
                    $this->error('留言失败!');
                }
            } else {
                $this->error($Message->getError());
            }
        } else {
            $this->error('非法请求!');
        }
    }
}

步骤 2:创建视图

Application/Home/View/Message/index.html

<!DOCTYPE html>
<html>
<head>留言板</title>
    <meta charset="utf-8">
    <style>
        body { font-family: Arial, sans-serif; margin: 20px; }
        .message-form { margin-bottom: 20px; padding: 10px; border: 1px solid #ccc; }
        .message-list { border: 1px solid #ccc; padding: 10px; }
        .message-item { padding: 10px; border-bottom: 1px solid #eee; }
    </style>
</head>
<body>
    <h1>ThinkPHP 留言板</h1>
    <!-- 留言表单 -->
    <div class="message-form">
        <form method="post" action="__URL__/add">
            <textarea name="content" rows="4" cols="50" placeholder="请输入留言内容..."></textarea><br>
            <input type="submit" value="提交留言">
        </form>
    </div>
    <!-- 留言列表 -->
    <div class="message-list">
        <volist name="list" id="msg">
            <div class="message-item">
                <p>{$msg.content}</p>
                <small>发布时间:{:date('Y-m-d H:i:s', $msg['create_time'])}</small>
            </div>
        </volist>
    </div>
</body>
</html>

步骤 3:访问 访问 http://localhost/myapp/index.php/Message/index 即可看到留言板界面。


第七部分:部署与总结

项目部署到服务器

  1. 将整个项目文件夹(myapp)通过 FTP 或其他工具上传到服务器的 Web 根目录。
  2. 确保 Web 服务器(如 Apache/Nginx)的用户对 Application/Runtime 目录有写入权限。
  3. 修改 Application/Common/Conf/config.php 中的数据库配置,使其连接到服务器上的数据库。
  4. 如果使用 Rewrite 模式,确保服务器配置了正确的 .htaccess 或 Nginx 重写规则。
  5. 通过域名访问项目。

ThinkPHP 3.2 的优缺点

  • 优点
    • 快速开发,文档齐全,社区活跃。
    • 对中文支持好,学习曲线平缓。
    • 内置了大量常用功能,如缓存、验证、分页等。
  • 缺点
    • 相对于现代框架(如 Laravel, Symfony),架构设计略显陈旧。
    • 安全性方面需要开发者自己注意,框架默认配置可能不够严格。
    • 生态和扩展性不如现代框架。

学习资源

希望这份详细的教程能帮助你快速掌握 ThinkPHP 3.2!祝你学习愉快!

分享:
扫描分享到社交APP
上一篇
下一篇