ThinkPHP之TP5 Request请求类
Posted qikexun
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ThinkPHP之TP5 Request请求类相关的知识,希望对你有一定的参考价值。
TP5 Request请求类
获取请求信息
- 获取请求信息
- 使用
\\think\\Request
类\\thinkphp\\library\\think\\Request.php
$request = \\think\\Request::instance();
- 使用助手函数
\\thinkphp\\helper.php
$request = request();
- 使用
获取param变量
- 获取param变量
- param变量是框架提供的用于自动识别
GET POST PUT
请求的一种变量获取方式 - param方法会把当前请求类型的参数和PATH_INFO变量以及GET请求合并
- param变量是框架提供的用于自动识别
# Request类的实现
// 获取当前请求的name变量
Request::instance()->param('name');
// 获取当前请求的所有变量(经过过滤)
Request::instance()->param();
// 获取当前请求的所有变量(原始数据)
Request::instance()->param(false);
// 获取当前请求的所有变量(包含上传文件)
Request::instance()->param(true);
# 使用助手函数实现
input('param.name');
input('param.');
# 或者
input('name');
input('');
# 单独获取get变量或者post变量
Request::instance()->get();
Request::instance()->post();
input('get.');
input('post.');
变量过滤
-
设置全局过滤规则
default_filter => 'htmlspecialchars'
-
使用Request对象进行全局变量的获取过滤
- 过滤方式包括函数、方法过滤
- PHP内置的Types of fillers
Request::instance()->filter('htmlspecialchars');
Request::instance()->filter(['strip_tags','htmlspecialchars']);
-
在获取变量的时候添加过滤方法
- 获取get变量,并用htmlspecialchars函数过滤
Request::instance()->get('name','','htmlspecialchars');
- 获取param变量,并用strip_tags函数过滤
Request::instance()->param('username','','strip_tags');
- 获取post变量,并用org\\Filter类的safeHtml方法过滤
Request::instance()->post('name','','org::Filter');
- 获取get变量,并用htmlspecialchars函数过滤
-
路由变量与get变量
http://www.36h.org.cn/home/test/index/id/100?page=10
- param方法: 能够获取所有参数(id, page)
- get方法: 只能获取?后面的请求字符串的参数(page)
- route方法: 只能获取到?前面的路由中的参数(id)
参数绑定
- 概念
- 参数绑定方式默认是按照变量名进行绑定
- 例如,给Blog控制器定义了两个操作方法
read
和archive
方法read
操作需要指定一个id
参数archive
方法需要指定年份year
和月份month
两个参数
namespace app\\index\\Controller;
class Blog
public function read($id)
return 'id='.$id;
public function archive($year='2021',$month='03')
return 'year='.$year.'&month='.$month;
- URL的访问地址分别是
http://serverName/index.php/index/blog/read/id/5
http://serverName/index.php/index/blog/archive/year/2021/month/08
依赖注入
-
概念
- 要在一个类A中使用另一个依赖类B时
- 不直接在类A中实例化类B
- 而是先实例化类B后再以参数的形式传入类A
-
操作方法注入
- 控制器的操作方法中如果需要调用请求对象
Request
- 可以在方法中定义
Request
类型的参数,并且与参数顺序无关 - 访问URL地址的时候,无需传入
request
参数 - 系统会自动注入当前的
Request
对象实例到该参数
- 控制器的操作方法中如果需要调用请求对象
namespace app\\index\\controller;
use think\\Request;
class Index
public function hello(Request $request)
return 'Hello,'.$request->param('name').'!';
- 方法继承注入
- 如果继承了系统的
Controller
类的话,也可以直接调用request
属性
- 如果继承了系统的
namespace app\\index\\controller;
use think\\Request;
class Index extends Controller
public function hello()
return 'Hello,'.$this->request->param('name').'!';
- 依赖注入原理分析
# 实例化普通写法
<?php
class User
public function getName()
return 'user-name';
class Goods
public function detail()
// 实例化User类
$user= new User();
$username= $user->getName();
return $username;
$goods= new Goods();
echo $goods->detail();
?>
# 依赖注入写法
<?php
class User
public function getName()
return 'user-name';
class Goods
public function detail(User $user)
// 获取用户名
$username= $user->getName();
return $username;
$goods= new Goods();
// 先实例化User类
$user= new User();
echo $goods->detail($user);
?>
- 接收请求参数总结
//1.获取请求对象
$request = request();
$request = \\think\\Request::instance();
$request = $this->request; //仅限于继承了底层控制器的情况下
public function save(Request $request) //依赖注入
//2. 接收请求参数 param方法
$params = $request->param();
$params = input();
$params = request()->param();
$id = $request->param('id');
$id = input('id');
public function edit($id)//参数绑定
以上是关于ThinkPHP之TP5 Request请求类的主要内容,如果未能解决你的问题,请参考以下文章