1.1 什么是ThinkPHP
ThinkPHP是一个开源的PHP开发框架,它遵循MVC(模型-视图-控制器)的设计模式,具有高效、灵活、安全、简单等特点。ThinkPHP提供了丰富的功能和工具,包括数据库操作、缓存、验证、模板引擎等,可以帮助开发者快速构建高质量的Web应用程序。同时,ThinkPHP还拥有完善的文档和社区支持,是PHP开发者的优秀选择。
1.2 ThinkPHP的历史
1.3 ThinkPHP的优势- 简单高效的路由功能
2.1 环境要求
2.2 安装ThinkPHP
composer create-project topthink/think tp5
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.1 什么是MVC模式
3.2 ThinkPHP中的MVC模式
3.3 MVC模式的优势- 降低耦合度:MVC模式将应用程序分为三个部分,使它们可以独立开发、测试、维护和修改,从而降低了它们之间的耦合度。
4.1 什么是路由
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');
4.2 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的美观性和安全性。
5.1 什么是控制器
这个控制器定义在app\index\controller\Index.php文件中,命名空间为app\index\controller。控制器中有一个index方法,当用户请求访问/index/index时,就会调用这个方法并返回Hello, ThinkPHP!。
5.2 ThinkPHP中的控制器
5.3 控制器的优势- 通过控制器可以实现代码的模块化,使得代码更加清晰易懂。
6.1 什么是模型
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中,一个模型对应着一张数据库表,通过模型可以对这张表进行操作。
定义一个模型需要继承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.1 什么是视图
// 控制器中 public function index() { $data = ['name' => 'Tom', 'age' => 18]; $this->assign('data', $data); return $this->fetch(); }姓名:{$data.name}
年龄:{$data.age}
7.2 ThinkPHP中的视图
//在控制器中使用模板引擎输出视图 public function index() { $this->assign('name', 'ThinkPHP'); return $this->fetch(); } //在模板文件中输出变量Hello,{$name}!
//父模板{% block title %}{% endblock %} {% block content %} {% endblock %} //子模板 {% extends 'layout.html' %} {% block title %} 子模板 {% endblock %} {% block content %}子模板内容
{% endblock %}
//生成控制器方法的URL url('index/index'); //生成控制器方法的URL,带参数 url('index/detail', ['id' => 1]); //生成模块/控制器/方法的URL url('admin/user/index'); //生成外部URL url('http://www.thinkphp.cn');
7.3 视图的优势- 视图的优势:
8.1 数据库的配置
'hostname' => 'localhost', 'database' => 'test', 'username' => 'root', 'password' => '123456', 'hostport' => '', 'params' => [],
$list = Db::name('user')->where('status', 1)->select();
8.2 数据库的连接
'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' => '[email protected]' ]); // 使用模型进行数据插入 $user = new User; $user->name = '李四'; $user->age = 25; $user->email = '[email protected]'; $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.1 ThinkPHP的优势和不足
优势 |
不足 |
1. 框架完善的文档和社区支持 |
1. 学习曲线相对较陡峭 |
2. 丰富的扩展和插件 |
2. 部分功能需要额外安装扩展 |
3. MVC架构清晰易懂 |
3. 性能相对其他框架略低 |
4. 数据库操作方便快捷 |
4. 部分功能需要手动实现 |
5. 安全性高,自带防止SQL注入等功能 |
5. 部分功能需要手动实现 |
9.2 ThinkPHP的应用场景
表格:
应用场景 |
案例 |
B2B电商平台 |
某某电商 |
企业级OA系统 |
某某OA |
在线教育平台 |
某某教育 |
社交网站 |
某某社交 |
物流管理系统 |
某某物流 |
9.3 ThinkPHP的发展趋势- ThinkPHP的发展趋势: