ThinkPHP大纲
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
- 方法二:手动安装
- 下载最新版本的ThinkPHP框架
- 解压到项目目录中
- 配置虚拟主机或者使用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模式开发的步骤如下:
- 定义模型:在/application目录下创建model目录,然后在该目录下创建对应的模型文件。
- 定义视图:在/application目录下创建view目录,然后在该目录下创建对应的视图文件。
- 定义控制器:在/application目录下创建controller目录,然后在该目录下创建对应的控制器文件。
- 在控制器中调用模型和视图,处理用户的请求。
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中,一个模型对应着一张数据库表,通过模型可以对这张表进行操作。
- 模型的使用
- 定义模型
定义一个模型需要继承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大纲相关推荐
- Thinkphp实战教程后台管理系统开发
目录 ├─Thinkphp5 后台管理开发.png ├─Thinkphp5 后台管理开发.xmind ├─Thinkphp实战教程后台管理系统开发-1.课程介绍及大纲.mp4 ├─Thinkphp实战 ...
- 2018年新版PHP学习路线图(内含大纲+视频+工具+书籍+面试)免费下载
传智播客黑马程序员作为一个IT学习平台,历经12年的成长,免费分享视频教程长达10万余小时,累计下载量超3000万次,受益人数达千万.2018年我们不忘初心,继续前行!路线图的宗旨就是分享,专业,便利 ...
- 麦子学院PHP工程师课程大纲
前面几天,发现麦子学院网站中有详细的介绍了PHP工程师的课程大纲.今天终于把独一无二的PHP工程师课程大纲整理出来了.作为一名PHP开发(http://www.maiziedu.com/course/ ...
- php实战开发管理系统,深入浅出PHP框架Thinkphp实战开发(权限管理、CMS内容管理系统)...
Thinkphp课程大纲: ThinkPHP 是一个免费开源的,快速.简单的面向对象的 轻量级PHP开发框架 ,创立于2006年初,遵循Apache2开源协议公布,是为了敏捷WEB应用开发跟简化企业应 ...
- Laravel和Thinkphp有什么区别,哪个框架好用
Laravel和Thinkphp这两个php框架对于php程序员都不陌生,新手可能对Thinkphp比较熟,也是国内比较出名的开源框架,更高级的Laravel一般有点经验的才使用. TP框架: Thi ...
- ThinkPHP 详细介绍
ThinkPHP 是一个免费开源的,快速.简单的面向对象的 轻量级PHP开发框架 ,创立于2006年初,遵循Apache2开源协议发布,是为了敏捷WEB应用开发和简化企业应用开发而诞生的.ThinkP ...
- php语+言教程,写给thinkphp开发者的laravel系列教程(九)打印数据-Fun言
php这种脚本语言调试起来是很方便的: 大多时候看报错打印一下数据就知道问题所在了: php 内置了常用打印函数 print 和 var_dump : 但是打印出来的样式实在让人目瞪狗呆: think ...
- ThInkPHP验证码不显示,解决方法汇总
出现ThInkPHP验证码不显示的情况 官方提示如下:如果无法显示验证码,请检查: ① PHP是否已经安装GD库支持: ② 输出之前是否有任何的输出(尤其是UTF8的BOM头信息输出):(打开验证码文 ...
- ThinkPHP入门(二)
smarty使用 smarty引入流程 1. 控制器IndexAction.class.phpfunction index()$this -> display(); (父类Action的disp ...
最新文章
- 丽水数据可视化设计价格_网站建设之B端交互设计——数据可视化图表
- 超融合服务器品牌型号,蓝盾发布云平台!强势加入云计算IT行列
- Linq TO SQL 虽好,但不要滥用
- Algorithm:【Algorithm算法进阶之路】之算法中的数学编程相关习题(时间速度、进制转换、排列组合、条件概率、斐波那契数列)
- Java 并发编程系列之闭锁(CountDownLatch)
- C / C++ 软件项目的目录结构
- 食疗去除头屑的小偏方 不错!
- 1017 A除以B (20分)
- Python进阶-函数默认参数,特别是参数传递为空列表
- c语言输出行末不得有多于空格,新人提问:如何将输出时每行最后一个空格删除...
- test1 exam3编程计算图形的面积
- 卷积神经网络多输入和多输出
- EasyUI的databox取值
- Windows的同步I/O和异步I/O
- Linux系统编程 -- 进程 信号
- CREO图文教程:三维设计案例之风扇叶制作图文教程之详细攻略
- imx 290 支持25fps
- 光伏电站清扫机器人_光伏电站清扫机器人
- 计算机网络交换机无法ping,无法Ping通路由器交换机提示request time out修复方法
- SAP PI/PO 视频,自己录制