文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

PHP之 ThinkPHP5.0框架的使用

2023-10-09 19:15

关注

简介:

1 php适合快速开发Web接口,其语法的简单和开发的速度拥有不少使用者,之前一度抢占编程语言前5。随着快速发展,也出现不少优秀框架,比较著名的有ThinkPHP,Laravel,Yii。

2 框架选择

  • ThinkPHP易上手,国内开发文档丰富,社区活跃;但目录结构不太整洁,深入不叫困难,适合中小型项目。
  • Laravel结构清晰,功能齐全,工具丰富,社区强大,但入门困难;文件较多,相对臃肿。适合中大型项目。
  • Yii OOP设计思想,使用方便,开发速度快,性能强大,功能丰富;大多英文文档,学习成本大,对技术要求高。适合中大型项目。

二,ThinkPHP5.0目录

1 Thinkphp5.0相对比较成熟稳定,官方地址:https://www.thinkphp.cn/down/framework.html

如果上面地址不行,用自动下载地址:https://www.thinkphp.cn/donate/download/id/870.html

2 跟目录说明

project  应用部署目录├─composer.json         composer定义文件├─README.md             README文件├─build.php             自动生成定义文件(参考)├─LICENSE.txt           授权说明文件├─application           应用目录(可设置)│  ├─common             公共模块目录(可更改)│  ├─runtime            应用的运行时目录(可写,可设置)│  ├─module             模块目录│  │  ├─config.php      模块配置文件│  │  ├─common.php      模块函数文件│  │  ├─controller      控制器目录│  │  ├─model           模型目录│  │  ├─view            视图目录│  │  ├─ ...            更多类库目录│  ├─common.php         公共函数文件│  ├─route.php          路由配置文件│  ├─database.php       数据库配置文件│  └─config.php         公共配置文件├─public                WEB部署目录(对外访问目录)│  ├─index.php          应用入口文件│  ├─.htaccess          用于apache的重写│  └─router.php         快速测试文件(用于自带webserver)├─thinkphp              框架系统目录│  ├─library            框架类库目录│  │  ├─behavior        行为类库目录│  │  ├─think           Think类库包目录│  │  ├─org             Org类库包目录│  │  ├─traits          系统Traits目录│  │  ├─ ...            更多类库目录│  ├─extend             扩展类库目录(可自定义)│  ├─vendor             第三方类库目录│  ├─mode               应用模式目录│  ├─tpl                系统模板目录│  ├─base.php           基础文件│  ├─convention.php     框架惯例配置文件│  └─start.php          框架引导文件

 2.3 将下载的thinkphp放到网站根目录访问,浏览器输入http://localhost/tp5/public/ 

3874d1433911bbe0fbc3e75d5a32a778.png

3 访问路径 

默认路径:http://localhost/tp5/public/

完整路径:​​​​​​http://localhost/tp5/public/index.php/index/index/index

上面看起来很多index,比较乱,我们可以另外自己写个控制器来清晰认识下

http://localhost/tp5/public/index.php/amodule/bcontroller/caction/id/1

[请求协议http]+[域名]+[tp目录]+[web入口public]+[入口文件]+[模块名]+[控制器]+[操作]+[参数]+[参数名]+[参数]+[参数名]...

4 简化访问路径,批量注册

原路径:http://localhost/tp5/public/index.php/amodule/bcontroller/caction/id/1

第一步,去掉public

将 public 里的 index.php 移动到根目录,修改对应的应用目录和引导文件

原文件:/../ 表示回退到上级目录,这里index.php的上级目录是tp跟目录

修改后文件,__DIR__表示当前文件的所在的位置,这里即index.php所在目录

第二步 配置 httpd.conf,搜索全部 AllowOverride none 改为 AllowOverride ALL

    AllowOverride none  改为   AllowOverride ALL    Options None    Order allow,deny    Allow from all

第三步 配置.htaccess

 在根目录创建.htaccess文件,如果别的地方有,可以拷贝过来

  Options +FollowSymlinks -Multiviews  RewriteEngine On   RewriteCond %{REQUEST_FILENAME} !-d  RewriteCond %{REQUEST_FILENAME} !-f  RewriteRule ^(.*)$ index.php?s=$1 [QSA,PT,L]

到这步访问路径是这样的 http://localhost/tp5/amodule/bcontroller/caction 

第四步 利用路由去掉模块和控制器

在tp5 -> application -> route.php里面增加路由

 [        'name' => '\w+',    ],    '[hello]'     => [        ':id'   => ['index/hello', ['method' => 'get'], ['id' => '\d+']],        ':name' => ['index/hello', ['method' => 'post']],    ],    '[test]'     => [        'new'   => ['amodule/bcontroller/caction', ['method' => 'get']],    ],];

这样访问的路径就会缩短为 http://localhost/tp5/test/new

或者这样修改

 [        'name' => '\w+',    ],    '[hello]'     => [        ':id'   => ['index/hello', ['method' => 'get'], ['id' => '\d+']],        ':name' => ['index/hello', ['method' => 'post']],    ],    'new/[:name]' => 'amodule/bcontroller/caction',];

访问的路径就会变为 http://localhost/tp5/new

5 第二种简化路径方法 Route::rule

静态路由:

 [//         'name' => '\w+',//     ],//     '[hello]'     => [//         ':id'   => ['index/hello', ['method' => 'get'], ['id' => '\d+']],//         ':name' => ['index/hello', ['method' => 'post']],//     ],//     // '[test]'     => [//     //     'new'   => ['amodule/bcontroller/caction', ['method' => 'get']],//     // ],//     // 'new/[:name]' => 'amodule/bcontroller/caction',// ];//引用路由模块use think\Route;//注册路由到amodule模块的bcontroller控制器的caction操作//静态路由Route::rule('new', 'amodule/bcontroller/caction','GET');

 访问路径会变为 http://localhost/tp5/new

注意:

必须去掉动态注册路由的部分

必须添加引用use think\Route;

 动态路由:

 [//         'name' => '\w+',//     ],//     '[hello]'     => [//         ':id'   => ['index/hello', ['method' => 'get'], ['id' => '\d+']],//         ':name' => ['index/hello', ['method' => 'post']],//     ],//     // '[test]'     => [//     //     'new'   => ['amodule/bcontroller/caction', ['method' => 'get']],//     // ],//     // 'new/[:name]' => 'amodule/bcontroller/caction',// ];//引用路由模块use think\Route;//注册路由到amodule模块的bcontroller控制器的caction操作//静态路由册Route::rule('new', 'amodule/bcontroller/caction','GET');//动态路由册Route::rule('test/:id','amodule/bcontroller/daction','GET');

 访问路径会变为 http://localhost/tp5/new     http://localhost/tp5/test/1

或者直接指定GET类型,不用引用think\Route

 [//         'name' => '\w+',//     ],//     '[hello]'     => [//         ':id'   => ['index/hello', ['method' => 'get'], ['id' => '\d+']],//         ':name' => ['index/hello', ['method' => 'post']],//     ],//     // '[test]'     => [//     //     'new'   => ['amodule/bcontroller/caction', ['method' => 'get']],//     // ],//     // 'new/[:name]' => 'amodule/bcontroller/caction',// ];//引用路由模块// use think\Route;// //注册路由到amodule模块的bcontroller控制器的caction操作// //静态路由册// Route::rule('new', 'amodule/bcontroller/caction','GET');// //动态路由册// Route::rule('test/:id','amodule/bcontroller/daction','GET');\think\Route::get('new','amodule/bcontroller/caction');\think\Route::get('test/:id','amodule/bcontroller/daction');

 访问路径会变为 http://localhost/tp5/new     http://localhost/tp5/test/1

 2.5 第三种简化路径方法,绑定Route::bind

// //绑定到模块/控制器/操作// 绑定当前的URL到 amodule模块Route::bind('amodule');// 绑定当前的URL到 amodule模块的bcontroller控制器Route::bind('amodule/bcontroller');

 访问路径会变为 http://localhost/tp5/caction

当然也能绑定其它目录,比如控制器,命名空间,类等等 

三 ThinkPHP5.0配置

1 入口文件

1e87d999a3b74105acf2b12dae09e634.png

 3.2 应用配置

5d3641764f37458a9bae340197ecabc1.png

3 数据库配置

83e24e1bfe7e43d9bafef61faea1a48d.png

 3.4 访问域名配置

e71c7652be8c4699a2ea1f114d77eaf9.png

 四,系统架构

1 ThinkPHP5.0在没有启用路由的情况下典型的URL访问规则是:

http://serverName/应用(或应用入口文件)/模块/控制器/操作/[参数名/参数值...]

2 支持切换到命令行访问,如果切换到命令行模式下面的访问规则是:

>php.exe index.php(应用入口文件) 模块/控制器/操作/[参数名/参数值...]

3 无论是URL访问还是命令行访问,都采用PATHINFO模式的访问地址,其中PATHINFO的分隔符是可以设置的。

4 thinkphp5取消了URL模式的概念,普通模式的URL访问不再支持,如果不支持PATHINFO的服务器可以使用兼容模式访问如下:

http://serverName/应用入口文件?s=/模块/控制器/操作/[参数名/参数值...]

5 简化URL访问,隐藏应用入口文件

httpd.conf配置文件中加载了mod_rewrite.so模块
2、AllowOverride None 将None改为 All
3、把下面的内容保存为.htaccess文件放到应用入口文件的同级目录下

RewriteEngine onRewriteCond %{REQUEST_FILENAME} !-dRewriteCond %{REQUEST_FILENAME} !-fRewriteRule ^(.*)$ index.php/$1 [QSA,PT,L]

6 隐藏模块

由于默认是采用多模块的支持,所以多个模块的情况下必须在URL地址中标识当前模块,如果只有一个模块的话,可以进行模块绑定,方法是应用的公共文件中添加如下代码:

// 绑定index模块\think\Route::bind('module','index');

设置后,我们的URL访问地址则变成:

http://serverName/应用入口/控制器/操作/[参数名/参数值...] // 访问的模块是index模块

7 隐藏控制器

如果你的应用比较简单,模块和控制器都只有一个,那么可以在应用公共文件中绑定模块和控制器,如下:

// 绑定index模块的index控制器\think\Route::bind('module','index/index');

设置后,我们的URL访问地址则变成:

http://serverName/应用入口/操作/[参数名/参数值...] // 访问的模块是index模块,控制器是Index控制器

五 路由

ada18fdc6c9d48efb005b009494c444d.png

1 ThinkPHP5.0默认采用的URL规则是:

http://server/module/controller/action/param/value/...

2 普通模式,关闭路由,完全使用默认的pathinfo方式URL:

'url_route_on'  =>  false

路由关闭后,不会解析任何路由规则,采用默认的PATH_INFO 模式访问URL:

module/controller/action/param/value/...

3 混合模式,开启路由,并使用路由+默认PATH_INFO方式的混合:

'url_route_on'  =>  true

4 注册路由,动态注册

使用Route类的register方法注册路由规则(通常可以在应用的公共文件中注册,或者定义配置文件后在公共文件中批量导入的方式注册),例如注册如下路由规则后:

\think\Route::register('new/:id','index/New/read');

我们访问:

http://serverName/new/5

ThinkPHP5.0的路由规则定义是从根目录开始,而不是基于模块名的。

其实是访问的:

http://serverName/index/new/read/id/5

六,控制器 

1 ThinkPHP引入了分层控制器的概念,通过URL访问的控制器为访问控制器层(Controller)或者主控制器,访问控制器是由\think\App类负责调用和实例化的,无需手动实例化。

2 URL解析和路由后,会把当前的URL地址解析到 [ 模块/控制器/操作 ],其实也就是执行某个控制器类的某个操作方法,下面是一个示例:

namespace app\index\controller;class New {    public function index(){        return 'index';    }    public function add(){        return 'add';    }    public function edit($id){        return 'edit:'.$id;    }}

3 当前定义的主控制器位于index模块下面,所以当访问不同的URL地址的页面输出如下:

http://serverName/index/new/index // 输出 indexhttp://serverName/index/new/add     // 输出 addhttp://serverName/index/new/edit/id/5 // 输出 edit:5

七 视图 

1 视图功能由Think\View类和模板引擎(驱动)类一起完成

实例化视图类

// 实例化视图类$view = new \think\View(); // 渲染模板输出return $view->fetch();

2 如果你的控制器继承了\think\Controller类的话,则可以直接使用

 // 渲染模板输出return $this->fetch();

需要注意的是,ThinkPHP5的视图fetch方法不会直接渲染输出,只是返回解析后的内容。如果在控制器类返回 视图解析内容的话,渲染输出系统会自动调用think\Response类的send方法进行渲染输出。

八,数据库

e01a192e84d342d8b7387eb3cf283ed0.png

1 全局配置定义

常用的配置方式是在公共配置文件或者模块配置文件中添加下面的配置参数:

'database'=> [    // 数据库类型    'type'        => 'mysql',    // 数据库连接DSN配置    'dsn'         => '',    // 服务器地址    'hostname'    => '127.0.0.1',    // 数据库名    'database'    => 'thinkphp',    // 数据库用户名    'username'    => 'root',    // 数据库密码    'password'    => '',    // 数据库连接端口    'hostport'    => '',    // 数据库连接参数    'params'      => [],    // 数据库编码默认采用utf8    'charset'     => 'utf8',    // 数据库表前缀    'prefix'      => 'think_',    // 数据库调试模式    'debug'       => true,    // 数据库部署方式:0 集中式(单一服务器),1 分布式(主从服务器)    'deploy'      => 0,    // 数据库读写是否分离 主从式有效    'rw_separate' => false,    // 读写分离后 主服务器数量    'master_num'  => 1,    // 指定从服务器序号    'slave_no'    => '',];

2 也支持独立数据库配置文件定义的方式,例如在 application/database.php文件中定义如下:

return [    // 数据库类型    'type'        => 'mysql',    // 数据库连接DSN配置    'dsn'         => '',    // 服务器地址    'hostname'    => '127.0.0.1',    // 数据库名    'database'    => 'thinkphp',    // 数据库用户名    'username'    => 'root',    // 数据库密码    'password'    => '',    // 数据库连接端口    'hostport'    => '',    // 数据库连接参数    'params'      => [],    // 数据库编码默认采用utf8    'charset'     => 'utf8',    // 数据库表前缀    'prefix'      => 'think_',    // 数据库调试模式    'debug'       => false,    // 数据库部署方式:0 集中式(单一服务器),1 分布式(主从服务器)    'deploy'      => 0,    // 数据库读写是否分离 主从式有效    'rw_separate' => false,    // 读写分离后 主服务器数量    'master_num'  => 1,    // 指定从服务器序号    'slave_no'    => '',];

3 也可以支持简化的DSN数据库连接字符串写法(支持大部分的连接参数),例如:

'database'=> 'mysql://root:passwd@127.0.0.1:3306/thinkphp#utf8'

如果需要的话,可以对每个模块定义不同的数据库连接信息,只需要在模块配置文件中添加database设置参数即可。

4 连接参数

可以针对不同的连接需要添加数据库的连接参数,例如:

如果需要使用长连接,可以采用下面的方式定义:

'params' => [PDO::ATTR_PERSISTENT => true],

九 输入,变量获取 

1 获取GET变量

\think\Input::get('id'); // 获取某个get变量\think\Input::get('name'); // 获取get变量\think\Input::get(); // 获取所有的get变量(数组)

或者使用内置的快捷I方法实现相同的功能:

2 获取POST变量

\think\Input::post('name'); // 获取某个post变量\think\Input::post(); // 获取全部的post变量

使用快捷方法实现:

I('post.name');I('post.');

3 获取PUT变量

\think\Input::put('name'); // 获取某个put变量\think\Input::put(); // 获取全部的put变量

使用快捷方法实现:

I('put.name');I('put.');

4 获取PARAM变量

PARAM变量是框架提供的用于自动识别GET、POST或者PUT请求的一种变量获取方式,例如:

\think\Input::param('name');如果当前是get请求,那么等效于\think\Input::get('name');如果当前是post请求,则等同于\think\Input::post('name');

使用快捷方法实现:

I('param.name');I('param.');或者I('name');I('');

因为I函数默认就采用PARAM变量读取方式。

5 获取REQUEST变量

\think\Input::request('id'); // 获取某个request变量\think\Input::request(); // 获取全部的request变量

使用快捷方法实现:

6 获取SERVER变量

\think\Input::server('PHP_SELF'); // 获取某个server变量\think\Input::server(); // 获取全部的server变量

使用快捷方法实现:

I('server.PHP_SELF');I('server.');

7 获取SESSION变量

\think\Input::session('user_id'); // 获取某个session变量\think\Input::session(); // 获取全部的session变量

使用快捷方法实现:

I('session.user_id');I('session.');

8 获取Cookie变量

\think\Input::cookie('user_id'); // 获取某个cookie变量\think\Input::cookie(); // 获取全部的cookie变量

使用快捷方法实现:

I('cookie.user_id');I('cookie.');

9 变量过滤

支持对获取的变量进行过滤,过滤方式包括函数、方法过滤,以及PHP内置的Types of filters,例如:

\think\Input::get('name','htmlspecialchars'); // 获取get变量 并用htmlspecialchars函数过滤\think\Input::param('username','strip_tags'); // 获取param变量 并用strip_tags函数过滤\think\Input::post('name','org\Filter::safeHtml'); // 获取post变量 并用org\Filter类的safeHtml方法过滤

可以支持传入多个过滤规则,例如:

\think\Input::param('username','strip_tags,strtolower'); // 获取param变量 并依次调用strip_tags、strtolower函数过滤

Input类还支持PHP内置提供的Filter ID过滤,例如:

\think\Input::post('email',FILTER_VALIDATE_EMAIL);

框架对FilterID做了转换支持,因此也可以使用字符串的方式,例如:

\think\Input::post('email','email');

采用字符串方式定义FilterID的时候,系统会自动进行一次filter_id调用转换成Filter常量。

具体的字符串根据filter_list函数的返回值来定义。

需要注意的是,采用Filter ID 进行过滤的话,如果不符合过滤要求的话 会返回false,因此你需要配合默认值来确保最终的值符合你的规范。

例如,

\think\Input::post('email',FILTER_VALIDATE_EMAIL,'');

就表示,如果不是规范的email地址的话 返回空字符串。

10 变量修饰符

I函数支持对变量使用修饰符功能,可以更好的过滤变量。

用法如下: 
I('变量类型.变量名/修饰符');
或者
\think\Input::get('变量名/修饰符');

例如:

I('get.id/d');I('post.name/s');I('post.ids/a');\think\Input::get('id/d');

ThinkPHP5.0版本默认的变量修饰符是/s,如果需要传入字符串之外的变量可以使用下面的修饰符,包括:

修饰符作用
s强制转换为字符串类型
d强制转换为整形类型
b强制转换为布尔类型
a强制转换为数组类型
f强制转换为浮点类型

如果你要获取的数据为数组,请一定注意要加上 /a 修饰符才能正确获取到。

来源地址:https://blog.csdn.net/qq_29848853/article/details/129645184

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯