1. 简介

1.1 什么是ThinkPHP

  • 什么是ThinkPHP

ThinkPHP是一个开源的PHP开发框架,它遵循MVC(模型-视图-控制器)的设计模式,具有高效、灵活、安全、简单等特点。ThinkPHP提供了丰富的功能和工具,包括数据库操作、缓存、验证、模板引擎等,可以帮助开发者快速构建高质量的Web应用程序。同时,ThinkPHP还拥有完善的文档和社区支持,是PHP开发者的优秀选择。

1.2 ThinkPHP的历史

  • ThinkPHP的历史:ThinkPHP是一款开源的PHP开发框架,由中国开发者创造和维护。它的第一个版本于2006年发布,经过多年的发展和迭代,已经成为国内最流行的PHP框架之一。ThinkPHP采用了MVC设计模式,具有高效、简洁、安全、可扩展等特点,广泛应用于各种Web应用程序的开发。

1.3 ThinkPHP的优势- 简单高效的路由功能

  • 强大的模板引擎
  • 丰富的数据库支持
  • 安全性高的认证和授权机制
  • 丰富的第三方类库支持
  • 灵活的插件机制
  • 完善的错误处理和调试机制
  • 详细的开发文档和社区支持

2. 安装和配置

2.1 环境要求

  • 环境要求:

    • PHP >= 5.6.0
    • PDO PHP Extension
    • MBstring PHP Extension
    • CURL PHP Extension
    • OpenSSL PHP Extension

2.2 安装ThinkPHP

  • 安装ThinkPHP

    • 方法一:使用Composer安装

composer create-project topthink/think tp5

    • 方法二:手动安装
      1. 下载最新版本的ThinkPHP框架
      2. 解压到项目目录中
      3. 配置虚拟主机或者使用PHP内置服务器启动
    • 方法三:使用Git安装

git clone https://github.com/top-think/think.git

2.3 配置ThinkPHP- 配置数据库连接信息、URL模式、默认访问块

'DB_TYPE'   => 'mysql', // 数据库类型
'DB_HOST'   => 'localhost', // 服务器地址
'DB_NAME'   => 'test', // 数据库名
'DB_USER'   => 'root', // 用户名
'DB_PWD'    => '', // 密码
'DB_PORT'   => '3306', // 端口
'DB_PREFIX' => 'think_', // 数据库表前缀'URL_MODEL' => 2, // URL模式'DEFAULT_MODULE' => 'Home', // 默认模块

3. MVC模式

3.1 什么是MVC模式

  • MVC模式是一种软件架构模式,将一个应用程序分为三个核心部分:模型(Model),视图(View)和控制器(Controller)。
  • 模型(Model):负责处理应用程序的数据逻辑,包括数据的存储、检索、更新和删除等操作。
  • 视图(View):负责展示数据给用户,通常是通过HTML、CSS和JavaScript等技术生成页面。
  • 控制器(Controller):负责处理用户的请求并调用相应的模型和视图,将它们组合成一个完整的响应返回给用户。
  • MVC模式可以使应用程序的各个部分分离开来,便于开发、测试和维护。

3.2 ThinkPHP中的MVC模式

  • 在ThinkPHP中,MVC模式分为三个部分:模型、视图、控制器。
  • 模型(Model):负责数据的处理,包括数据的增删改查等操作。
  • 视图(View):负责数据的展示,将处理好的数据以页面的形式呈现给用户。
  • 控制器(Controller):负责接收用户的请求,调用相应的模型和视图,最终将处理好的数据返回给用户。
  • 通过MVC模式的分离,可以使得代码更加清晰、易于维护。同时,也可以使得不同的开发人员在不同的模块中进行开发,提高开发效率。
  • 在ThinkPHP中,使用MVC模式开发的步骤如下:
    1. 定义模型:在/application目录下创建model目录,然后在该目录下创建对应的模型文件。
    2. 定义视图:在/application目录下创建view目录,然后在该目录下创建对应的视图文件。
    3. 定义控制器:在/application目录下创建controller目录,然后在该目录下创建对应的控制器文件。
    4. 在控制器中调用模型和视图,处理用户的请求。

3.3 MVC模式的优势- 降低耦合度:MVC模式将应用程序分为三个部分,使它们可以独立开发、测试、维护和修改,从而降低了它们之间的耦合度。

  • 提高复用性:MVC模式使得模型和视图可以在不同的应用程序中重复使用,从而提高了代码的复用性。
  • 易于维护:MVC模式将应用程序分为三个部分,使得每个部分都可以独立地进行修改和维护,从而使得整个应用程序更易于维护。
  • 更好的可扩展性:MVC模式使得应用程序可以更容易地进行扩展,例如添加新的视图或控制器,而不会影响到其他部分的代码。
  • 更好的测试性:MVC模式使得应用程序的每个部分都可以独立地进行测试,从而提高了测试的效率和可靠性。

4. 路由

4.1 什么是路由

  • 路由是指将URL请求映射到特定的处理程序的过程。
  • 在ThinkPHP中,路由配置文件位于项目根目录下的route目录中的route.php文件中。
  • 路由配置可以通过闭包函数、控制器方法、静态方法等多种方式来定义。
  • 例如,我们可以在route.php文件中定义以下路由规则:
use think\facade\Route;//闭包函数路由
Route::get('hello/:name', function ($name) {return 'Hello,' . $name . '!';
});//控制器方法路由
Route::get('user/:id', 'index/User/read');//静态方法路由
Route::get('test', '\app\index\controller\Test::index');
  • 上述代码中,分别定义了三种不同类型的路由规则,分别是闭包函数路由、控制器方法路由和静态方法路由。
  • 闭包函数路由通过匿名函数来处理请求,控制器方法路由通过指定控制器类和方法来处理请求,静态方法路由通过指定静态方法所在的类来处理请求。
  • 通过路由配置,我们可以将URL请求映射到特定的处理程序,实现更加灵活和方便的URL管理。

4.2 ThinkPHP中的路由

  • ThinkPHP中的路由
    • 基本路由 Route::rule('hello/:name', 'index/hello');
    • 路由参数Route::rule('blog/:id', 'blog/read');
    • 路由分组
Route::group('admin', function () {Route::rule('user', 'admin/user/index');     Route::rule('login', 'admin/login/index');
}); 
    • 路由别名Route::rule('user/:id', 'index/user/read')->alias('user');
    • 路由重定向Route::rule('home', 'index/index/index', 'redirect');
    • 路由缓存'url_route_cache' => true,

4.3 路由的优势- 可以隐藏URL中的参数,增加了URL的美观性和安全性。

  • 可以将URL与具体的控制器和方法进行绑定,方便管理和维护。
  • 可以通过路由规则进行URL的重定向和自定义,提高了灵活性和可扩展性。
  • 可以根据不同的请求方式和参数,匹配不同的路由规则,实现更细粒度的控制和处理。
  • 可以通过路由分组,将不同模块的路由规则进行分离和管理,提高了代码的可读性和可维护性。

5. 控制器

5.1 什么是控制器

  • 什么是控制器:
    控制器是MVC模式中的C,是整个应用程序的控制中心,负责接收用户的请求,调用模型和视图完成用户的需求。控制器可以根据请求的不同,调用不同的模型和视图,实现不同的功能。下面是一个简单的控制器示例:
<?php namespace app\index\controller; class Index {public function index()     {return 'Hello, ThinkPHP!';     } }

这个控制器定义在app\index\controller\Index.php文件中,命名空间为app\index\controller。控制器中有一个index方法,当用户请求访问/index/index时,就会调用这个方法并返回Hello, ThinkPHP!。

5.2 ThinkPHP中的控制器

  • 控制器是MVC架构中的C,主要负责处理用户请求和返回响应结果。
  • ThinkPHP中的控制器命名规范为:模块名+Controller,如IndexController。
  • 控制器中的方法即为用户请求的操作,可以通过URL访问到。
  • 控制器中可以使用$this->assign()方法将变量传递给模板。
  • 控制器中可以使用$this->redirect()方法进行重定向。
  • 控制器中可以使用$this->error()方法和$this->success()方法分别返回错误和成功信息。
  • ThinkPHP中的控制器可以继承Think\Controller类,也可以继承自定义的基类。
  • 控制器中可以使用__construct()方法进行初始化操作。
  • 控制器中可以使用_before()方法和_after()方法进行前置和后置操作。
  • 控制器中可以使用_ajax()方法和_json()方法分别返回Ajax请求和JSON数据。
  • 控制器中可以使用_table()方法和_export()方法分别输出表格和导出数据。

5.3 控制器的优势- 通过控制器可以实现代码的模块化,使得代码更加清晰易懂。

  • 控制器可以对请求进行处理和响应,实现业务逻辑。
  • 控制器可以调用模型层的方法,实现对数据的操作。
  • 控制器可以进行权限控制,保护系统的安全性。
  • 控制器可以实现路由的控制,方便进行 URL 设计和管理。

6. 模型

6.1 什么是模型

  • 模型是MVC架构中的M,即数据模型,用于处理数据的增删改查操作。
  • 模型通常与数据库中的表相对应,一个模型类对应一个表。
  • 模型可以定义数据验证规则、关联关系、操作数据库等。
  • 模型的定义一般放在application\index\model目录下,可以通过继承think\Model类来定义模型。
  • 示例代码:
namespace app\index\model;use think\Model;class User extends Model
{// 定义数据表名protected $table = 'user';// 定义主键protected $pk = 'id';// 定义时间戳字段protected $autoWriteTimestamp = true;// 定义数据验证规则protected $rule = ['name|姓名' => 'require|max:20','age|年龄' => 'require|integer|between:1,120','email|邮箱' => 'email|unique:user',];// 定义关联关系public function orders(){return $this->hasMany('Order', 'user_id', 'id');}// 定义操作数据库public function getUserById($id){return $this->where('id', $id)->find();}
}

6.2 ThinkPHP中的模型

  • 模型定义

ThinkPHP中的模型使用MVC设计模式,模型主要负责和数据库打交道,处理数据的增删改查等操作。在ThinkPHP中,一个模型对应着一张数据库表,通过模型可以对这张表进行操作。

  • 模型的使用
  1. 定义模型

定义一个模型需要继承Think\Model类,例如定义一个User模型:

namespace app\index\model;use think\Model;class User extends Model
{// 模型关联的数据表protected $table = 'user';// 模型的主键protected $pk = 'id';// 模型的字段信息protected $schema = ['id'         => 'int','username'   => 'string','password'   => 'string','create_time'=> 'int','update_time'=> 'int',];
}

2.增加数据

$user = new User;
$user->username = 'admin';
$user->password = md5('123456');
$user->create_time = time();
$user->save();

3.查询数据

// 查询所有数据
$users = User::select();// 根据主键查询单条数据
$user = User::get(1);// 查询指定字段的数据
$users = User::field('id,username')->select();// 查询条件
$users = User::where('username', 'admin')->select();// 分页查询
$users = User::paginate(10);

4.更新数据

$user = User::get(1);
$user->username = 'admin2';
$user->save();

5.删除数据

$user = User::get(1);
$user->delete();
  • 模型关联

ThinkPHP中的模型支持多种关联方式,包括一对一、一对多、多对多等关联方式。例如定义一个User模型和一个Order模型,一个用户可以对应多个订单,一个订单只能对应一个用户:

namespace app\index\model;use think\Model;class User extends Model
{// 定义一对多关联public function orders(){return $this->hasMany('Order');}
}class Order extends Model
{// 定义一对一关联public function user(){return $this->belongsTo('User');}
}

查询用户及其订单信息:

$user = User::with('orders')->find(1);// 输出用户信息
echo $user->username;// 输出用户的订单信息
foreach ($user->orders as $order) {echo $order->order_no;
}

6.3 模型的优势- 模型可以帮助我们更好地组织和管理数据,使得数据的增删改查变得更加方便快捷。

  • 模型可以对数据进行有效的校验和验证,保证数据的合法性和完整性。
  • 模型可以将业务逻辑和数据操作分离,使得代码更加清晰易懂,易于维护。
  • 模型支持多种关联关系,如一对一、一对多、多对多等,方便进行数据的关联查询和操作。
  • 模型支持软删除和查询作用域等高级功能,可以更好地满足复杂业务需求。

7. 视图

7.1 什么是视图

  • 视图是什么?视图(View)是MVC模式中的V,即视图模型(View Model),是Web应用程序中的用户界面。视图通常是一个HTML文件,包含了展示数据的标记和模板。
  • 视图的作用是什么?视图的主要作用是将数据呈现给用户,将控制器中处理好的数据以某种可读性强的方式展示给用户。
  • 视图的使用方法是什么?视图的使用方法是在控制器中调用视图模板,将处理好的数据传递给视图模板,再由视图模板将数据渲染成HTML页面。在ThinkPHP中,使用$this->assign()方法将数据传递给视图模板。例如:
// 控制器中
public function index()
{$data = ['name' => 'Tom', 'age' => 18];$this->assign('data', $data);return $this->fetch();
}<!-- 视图模板中 -->
<h1>姓名:{$data.name}</h1>
<h1>年龄:{$data.age}</h1>

7.2 ThinkPHP中的视图

  • ThinkPHP中的视图
    • 使用模板引擎输出视图
//在控制器中使用模板引擎输出视图
public function index() {$this->assign('name', 'ThinkPHP');     return $this->fetch();
}
//在模板文件中输出变量
<h1>Hello,{$name}!</h1> 
    • 视图继承
//父模板
<!DOCTYPE html>
<html> <head>     <meta charset="UTF-8">     <title>{% block title %}{% endblock %}</title> </head> <body>     {% block content %}{% endblock %} </body>
</html>
//子模板
{% extends 'layout.html' %}
{% block title %}
子模板
{% endblock %}
{% block content %}
<h1>子模板内容</h1>
{% endblock %} 
    • 视图中的URL生成
//生成控制器方法的URL
url('index/index');
//生成控制器方法的URL,带参数
url('index/detail', ['id' => 1]);
//生成模块/控制器/方法的URL
url('admin/user/index');
//生成外部URL
url('http://www.thinkphp.cn'); 

7.3 视图的优势- 视图的优势:

  • 视图可以将页面的结构和逻辑分离,使得代码更加清晰易懂。
  • 视图可以重复利用,提高代码的复用率。
  • 视图可以根据需要进行继承和组合,使得页面的设计更加灵活多变。
  • 视图可以通过缓存技术提高页面的访问速度,减少服务器的压力。
  • 视图可以使用模板引擎,使得页面的设计更加简单、快捷。

8. 数据库操作

8.1 数据库的配置

  • 数据库的配置:
    • 配置文件位于/config/database.php
    • 配置数据库连接信息:
'hostname' => 'localhost',
'database' => 'test',
'username' => 'root',
'password' => '123456',
'hostport' => '',
'params' => [], 
    • 使用Db类进行数据库操作,例如查询:
$list = Db::name('user')->where('status', 1)->select(); 
    • 更多数据库操作方法请参考ThinkPHP官方文档。

8.2 数据库的连接

  • 数据库的连接方式
    • DSN方式
    • 配置文件方式
  • DSN方式连接数据库的示例:
'db_type'   => 'mysql',
'db_host'   => '127.0.0.1',
'db_name'   => 'test',
'db_user'   => 'root',
'db_pwd'    => '',
'db_port'   => '3306',
'db_charset'=>    'utf8',
'db_params' =>  [\PDO::ATTR_CASE => \PDO::CASE_NATURAL
],
'db_debug'  =>  true,
'db_deploy_type'=> 0,
'db_rw_separate'=> false,
'db_master_num'=> 1,
'db_slave_no' => '',
'db_fields_strict'=> true,
'db_bind_param'=>   false,
'db_debug'  =>  true,
  • 配置文件方式连接数据库的示例:
return [// 数据库类型'type'        => 'mysql',// 服务器地址'hostname'    => '127.0.0.1',// 数据库名'database'    => 'test',// 数据库用户名'username'    => 'root',// 数据库密码'password'    => '',// 数据库连接端口'hostport'    => '3306',// 数据库连接参数'params'      => [],// 数据库编码默认采用utf8'charset'     => 'utf8',// 数据库表前缀'prefix'      => 'think_',// 数据库调试模式'debug'       => true,// 数据库部署方式:0 集中式(单一服务器),1 分布式(主从服务器)'deploy'      => 0,// 数据库读写是否分离 主从式有效'rw_separate' => false,// 读写分离后 主服务器数量'master_num'  => 1,// 指定从服务器序号'slave_no'    => '',// 是否严格检查字段是否存在'fields_strict' => true,// 数据集返回类型'resultset_type' => 'collection',// 自动写入时间戳字段'auto_timestamp' => false,// 时间字段取出后的默认时间格式'datetime_format' => 'Y-m-d H:i:s',// 是否需要进行SQL性能分析'sql_explain' => false,
];

8.3 数据库的增删改查- 数据库的增加操作

// 使用Query类进行数据插入
Db::table('user')->insert(['name' => '张三','age' => 20,'email' => 'zhangsan@qq.com'
]);// 使用模型进行数据插入
$user = new User;
$user->name = '李四';
$user->age = 25;
$user->email = 'lisi@qq.com';
$user->save();
  • 数据库的删除操作
// 使用Query类进行数据删除
Db::table('user')->where('id', 1)->delete();// 使用模型进行数据删除
$user = User::get(2);
$user->delete();
  • 数据库的修改操作
// 使用Query类进行数据修改
Db::table('user')->where('id', 3)->update(['name' => '王五']);// 使用模型进行数据修改
$user = User::get(4);
$user->name = '赵六';
$user->save();
  • 数据库的查询操作
// 使用Query类进行数据查询
Db::table('user')->where('age', '>', 18)->select();// 使用模型进行数据查询
User::where('age', '<', 30)->select();

表格语法:

操作方式

使用方法

数据库的增加操作

详见上方示例

数据库的删除操作

详见上方示例

数据库的修改操作

详见上方示例

数据库的查询操作

详见上方示例

9. 总结

9.1 ThinkPHP的优势和不足

  • 9.1 ThinkPHP的优势和不足

优势

不足

1. 框架完善的文档和社区支持

1. 学习曲线相对较陡峭

2. 丰富的扩展和插件

2. 部分功能需要额外安装扩展

3. MVC架构清晰易懂

3. 性能相对其他框架略低

4. 数据库操作方便快捷

4. 部分功能需要手动实现

5. 安全性高,自带防止SQL注入等功能

5. 部分功能需要手动实现

9.2 ThinkPHP的应用场景

  • 使用ThinkPHP开发的B2B电商平台案例
  • 使用ThinkPHP开发的企业级OA系统案例
  • 使用ThinkPHP开发的在线教育平台案例
  • 使用ThinkPHP开发的社交网站案例
  • 使用ThinkPHP开发的物流管理系统案例

表格:

应用场景

案例

B2B电商平台

某某电商

企业级OA系统

某某OA

在线教育平台

某某教育

社交网站

某某社交

物流管理系统

某某物流

9.3 ThinkPHP的发展趋势- ThinkPHP的发展趋势:

  • 更加注重性能优化,例如采用Swoole扩展等
  • 更加注重安全性,例如加强对SQL注入、XSS攻击等的防范
  • 更加注重开发效率,例如引入更多的快捷开发工具和插件
  • 更加注重微服务和分布式架构的支持,例如引入RPC、消息队列等技术
  • 更加注重跨平台和跨语言的支持,例如支持多种数据库和多种编程语言的集成。

ThinkPHP大纲相关推荐

  1. Thinkphp实战教程后台管理系统开发

    目录 ├─Thinkphp5 后台管理开发.png ├─Thinkphp5 后台管理开发.xmind ├─Thinkphp实战教程后台管理系统开发-1.课程介绍及大纲.mp4 ├─Thinkphp实战 ...

  2. 2018年新版PHP学习路线图(内含大纲+视频+工具+书籍+面试)免费下载

    传智播客黑马程序员作为一个IT学习平台,历经12年的成长,免费分享视频教程长达10万余小时,累计下载量超3000万次,受益人数达千万.2018年我们不忘初心,继续前行!路线图的宗旨就是分享,专业,便利 ...

  3. 麦子学院PHP工程师课程大纲

    前面几天,发现麦子学院网站中有详细的介绍了PHP工程师的课程大纲.今天终于把独一无二的PHP工程师课程大纲整理出来了.作为一名PHP开发(http://www.maiziedu.com/course/ ...

  4. php实战开发管理系统,深入浅出PHP框架Thinkphp实战开发(权限管理、CMS内容管理系统)...

    Thinkphp课程大纲: ThinkPHP 是一个免费开源的,快速.简单的面向对象的 轻量级PHP开发框架 ,创立于2006年初,遵循Apache2开源协议公布,是为了敏捷WEB应用开发跟简化企业应 ...

  5. Laravel和Thinkphp有什么区别,哪个框架好用

    Laravel和Thinkphp这两个php框架对于php程序员都不陌生,新手可能对Thinkphp比较熟,也是国内比较出名的开源框架,更高级的Laravel一般有点经验的才使用. TP框架: Thi ...

  6. ThinkPHP 详细介绍

    ThinkPHP 是一个免费开源的,快速.简单的面向对象的 轻量级PHP开发框架 ,创立于2006年初,遵循Apache2开源协议发布,是为了敏捷WEB应用开发和简化企业应用开发而诞生的.ThinkP ...

  7. php语+言教程,写给thinkphp开发者的laravel系列教程(九)打印数据-Fun言

    php这种脚本语言调试起来是很方便的: 大多时候看报错打印一下数据就知道问题所在了: php 内置了常用打印函数 print 和 var_dump : 但是打印出来的样式实在让人目瞪狗呆: think ...

  8. ThInkPHP验证码不显示,解决方法汇总

    出现ThInkPHP验证码不显示的情况 官方提示如下:如果无法显示验证码,请检查: ① PHP是否已经安装GD库支持: ② 输出之前是否有任何的输出(尤其是UTF8的BOM头信息输出):(打开验证码文 ...

  9. ThinkPHP入门(二)

    smarty使用 smarty引入流程 1. 控制器IndexAction.class.phpfunction index()$this -> display(); (父类Action的disp ...

最新文章

  1. 丽水数据可视化设计价格_网站建设之B端交互设计——数据可视化图表
  2. 超融合服务器品牌型号,蓝盾发布云平台!强势加入云计算IT行列
  3. Linq TO SQL 虽好,但不要滥用
  4. Algorithm:【Algorithm算法进阶之路】之算法中的数学编程相关习题(时间速度、进制转换、排列组合、条件概率、斐波那契数列)
  5. Java 并发编程系列之闭锁(CountDownLatch)
  6. C / C++ 软件项目的目录结构
  7. 食疗去除头屑的小偏方 不错!
  8. 1017 A除以B (20分)
  9. Python进阶-函数默认参数,特别是参数传递为空列表
  10. c语言输出行末不得有多于空格,新人提问:如何将输出时每行最后一个空格删除...
  11. test1 exam3编程计算图形的面积
  12. 卷积神经网络多输入和多输出
  13. EasyUI的databox取值
  14. Windows的同步I/O和异步I/O
  15. Linux系统编程 -- 进程 信号
  16. CREO图文教程:三维设计案例之风扇叶制作图文教程之详细攻略
  17. imx 290 支持25fps
  18. 光伏电站清扫机器人_光伏电站清扫机器人
  19. 计算机网络交换机无法ping,无法Ping通路由器交换机提示request time out修复方法
  20. SAP PI/PO 视频,自己录制

热门文章

  1. lme4包中的glmer()函数来拟合混合效应模型,并进行逻辑回归分析。
  2. SQL大厂春招真题,独家详细解析
  3. 异步线程RequestContextHolder为空问题
  4. unable to load annotation processor
  5. 产品经理(14)-金融圈需求app
  6. Pandas第三部分Day5练习题
  7. MySQL到底大小写敏感还是不敏感?
  8. spring的后置处理器(未完结版)
  9. 办公室可以挂画吗?挂什么样的画好?
  10. 作物生长模型WOFOST测试