学习笔记-TP5框架学习笔记\(请求\)
2.请求相关
2.1 如何获取请求参数的?
首先要use一下TP写好的Request类,然后调用的话可以用很多种写法,下面是一种
<?php
namespace app\index\controller;
use think\Request;
class Index // class Index extends Controller 解释如下:
//如果你继承了系统的控制器基类think\Controller的话,系统已经自动完成了请求对象的构造方法注入了,你可以直接使用$this->request属性调用当前的请求对象。
{
/**
* @var \think\Request Request实例
*/
protected $request;
/**
* 构造方法
* @param Request $request Request对象
* @access public
*/
public function __construct(Request $request)
{
$this->request = $request;
}
public function index()
{
return $this->request->param('name');
}
}
还可以这些样子:
Request::instance=>param();//获取所有参数[ 结果类型数组],不分请求类型;
Request::instance=>param('name');//获取单个参数[即:直接填写变量名即可];
Request::instance=>get();//获取?后面的参数;
Request::instance=>route();//获取路由里面的参数;
Request::instance=>post();//获取post请求参数
eg:
public function hello()
{
$res=Request::instance()->param();
var_dump($res);
}
//这是依赖注入方式,无论是否继承系统的控制器基类,都可以使用操作方法注入。
public function hello(Request $request)
{
$res=$request->param();
var_dump($res);
}
//也可以使用助手函数
$request = request();
2.2 检测变量是否设置
可以使用has方法来检测一个变量参数是否设置,如下:
Request::instance()->has('id','get');
Request::instance()->has('name','post');
或者使用助手函数(助手函数很棒很简单)
input('?get.id');
input('?post.name');
2.3 请求方法
可以通过Request对象完成全局输入变量的检测、获取和安全过滤,支持包括$_GET、$_POST、$_REQUEST、$_SERVER、$_SESSION、$_COOKIE、$_ENV等系统变量,以及文件上传信息。
方法 |
描述 |
---|---|
param |
获取当前请求的变量 |
get |
获取 $_GET 变量 |
post |
获取 $_POST 变量 |
put |
获取 PUT 变量 |
delete |
获取 DELETE 变量 |
session |
获取 $_SESSION 变量 |
cookie |
获取 $_COOKIE 变量 |
request |
获取 $_REQUEST 变量 |
server |
获取 $_SERVER 变量 |
env |
获取 $_ENV 变量 |
route |
获取 路由(包括PATHINFO) 变量 |
file |
获取 $_FILES 变量 |
也可以在获取变量的时候添加过滤方法,例如:
Request::instance()->get('name','','htmlspecialchars'); // 获取get变量 并用htmlspecialchars函数过滤
Request::instance()->param('username','','strip_tags'); // 获取param变量 并用strip_tags函数过滤
Request::instance()->post('name','','org\Filter::safeHtml'); // 获取post变量 并用org\Filter类的safeHtml方法过滤
//可以支持传入多个过滤规则,例如:
Request::instance()->param('username','','strip_tags,strtolower');// 获取param变量 并依次调用strip_tags、strtolower函数过滤
2.4 【▲】请求方法伪装
支持请求类型伪装,可以在POST表单里面提交_method变量,传入需要伪装的请求类型,例如:
<form method="post" action="">
<input type="text" name="name" value="Hello">
<input type="hidden" name="_method" value="PUT" >
<input type="submit" value="提交">
</form>
提交后的请求类型会被系统识别为PUT请求。你可以设置为任何合法的请求类型,包括GET、POST、PUT和DELETE等。如果你需要改变伪装请求的变量名,可以修改应用配置文件:
// 表单请求类型伪装变量
'var_method' => '_m',
2.5 伪静态配置效果
'url_html_suffix' => 'shtml'
http://serverName/Home/Blog/read/id/1
等价于
http://serverName/Home/Blog/read/id/1.shtml
如果'url_html_suffix' => ''
则
任何后缀都能正常访问
// 关闭伪静态后缀访问
'url_html_suffix' => false,
http://serverName/index/blog/read/id/3.html
id参数的值会被解析为3.html
2.6 参数绑定
就是给控制器下的方法(函数),给上参数,这样在url访问的时候就直接加上这个参数再给个值就能自动获取,不需要写Request。
image-20220413134848111
2.7 请求缓存
例子:如果设置了这样一条路由,其中指定了cache字段。
Route::get('bind/:id','Index/bind',['cache'=>3600]);
那么只有第一次访问时会走正常的C-M-V流程,也就是会真正去调用控制器下的操作方法。
之后再访问同样路由的话,检测到同样的路由就不会再去调用控制器下的操作方法了,而是直接从缓存中获取响应。很给力。
点击关注,共同学习!
[安全狗的自我修养](https://mp.weixin.qq.com/s/E6Kp0fd7_I3VY5dOGtlD4w)
[github haidragon](https://github.com/haidragon)
https://github.com/haidragon