ThinkPHP6 请求
要使用请求对象必须使用门面方式( think\facade\Request类负责 )调用
可以通过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) 变量 |
middleware | 获取 中间件赋值/传递的变量 |
file | 获取 $_FILES 变量 |
1、GET 请求
PARAM
类型变量是框架提供的用于自动识别当前请求的一种变量获取方式,是系统推荐的获取请求参数的方法param
方法会把当前请求类型的参数和路由变量以及GET请求合并,并且路由变量是优先的
controller代码
public function edit(){ print_r( $_GET ); // 原生get接收 print_r( Request::param() ); // 获取当前请求的所有变量 print_r( Request::param('id') ); // 获取当前请求的id变量 print_r( Request::get() );}
view代码:index.html
<button class="layui-btn layui-btn-xs" onclick="edit({$right_v.id})">编辑</button><script type="text/javascript"> function edit(id){ layer.open({ type: 2, title: '编辑', shade: 0.3, area: ['480px', '440px'], content: '/index.php/index/edit?id='+id }); }</script>
2、POST 请求
controller代码
public function edit(){ $id = Request::param('id'); $shop = Db::table('shop_goods')->where('id',$id)->find(); $cat = Db::table('shop_cat')->where('status',1)->select(); View::assign([ 'shop' => $shop, 'cat' => $cat ]); return View::fetch();}public function edits(){ // print_r( Request::param() ); // print_r( Request::post() ); $all = Request::param(); $update = Db::table('shop_goods')->where('id',$all['id'])->update($all); if($update){ echo json_encode(['code'=>0,'msg'=>'修改成功']); }else{ echo json_encode(['code'=>1,'msg'=>'修改失败']); }}
view代码:edit.html
<!DOCTYPE html><html><head> <title></title> <link rel="stylesheet" type="text/css" href="/static/layui/css/layui.css"> <script type="text/javascript" src="/static/layui/layui.js"></script></head><body style="padding:10px;"> <form class="layui-form"> <input type="hidden" name="id" value="{$shop.id}"> <div class="layui-form-item"> <label class="layui-form-label">标题</label> <div class="layui-input-inline"> <input type="text" class="layui-input" name="title" value="{$shop.title}"> </div> </div> <div class="layui-form-item"> <label class="layui-form-label">分类</label> <div class="layui-input-inline"> <select name="cat"> <option value=0 {if $shop['cat']==0} selected {/if}></option> {volist name="cat" id="cat_v"} <option value="{$cat_v['id']}" {if $shop['cat']==$cat_v['id']} selected {/if}>{$cat_v['name']}</option> {/volist} </select> </div> </div> <div class="layui-form-item"> <label class="layui-form-label">原价</label> <div class="layui-input-inline"> <input type="text" class="layui-input" name="price" value="{$shop.price}"> </div> </div> <div class="layui-form-item"> <label class="layui-form-label">折扣</label> <div class="layui-input-inline"> <input type="text" class="layui-input" name="discount" value="{$shop.discount}"> </div> </div> <div class="layui-form-item"> <label class="layui-form-label">库存</label> <div class="layui-input-inline"> <input type="text" class="layui-input" name="stock" value="{$shop.stock}"> </div> </div> <div class="layui-form-item"> <label class="layui-form-label">状态</label> <div class="layui-input-inline"> <select name="status"> <option value="1" {if $shop['status']==1} selected {/if}>开启</option> <option value="2" {if $shop['status']==2} selected {/if}>关闭</option> </select> </div> </div> </form> <div class="layui-form-item"> <div class="layui-input-block"> <button class="layui-btn" onclick="save()">保存</button> </div> </div> <script type="text/javascript"> layui.use(['layer','form'],function(){ form = layui.form; layer = layui.layer; $ = layui.jquery; }); function save(){ $.post('/index.php/Index/edits',$('form').serialize(),function(res){ if(res.code>0){ layer.alert(res.msg,{icon:2}); }else{ layer.msg(res.msg); setTimeout(function(){parent.window.location.reload();},1000); } },'json'); } </script></body></html>
3、变量修饰符
序号 | 修饰符 | 作用 |
---|---|---|
1 | s | 强制转换为字符串类型 |
2 | d | 强制转换为整型类型 |
3 | b | 强制转换为布尔类型 |
4 | a | 强制转换为数组类型 |
5 | f | 强制转换为浮点类型 |
Request::get('id/d');Request::post('name/s');Request::param('price/f');
二、请求类型
方法 | 说明 |
---|---|
method | 获取当前请求类型 |
has | 判断传值是否存在 |
isGet | 判断是否GET请求 |
isPost | 判断是否POST请求 |
isPut | 判断是否PUT请求 |
isDelete | 判断是否DELETE请求 |
isAjax | 判断是否AJAX请求 |
isPjax | 判断是否PJAX请求 |
isJson | 判断是否JSON请求 |
isMobile | 判断是否手机访问 |
isHead | 判断是否HEAD请求 |
isPatch | 判断是否PATCH请求 |
isOptions | 判断是否OPTIONS请求 |
isCli | 判断是否为CLI执行 |
isCgi | 判断是否为CGI模式 |
1、method
public function edit(){ if(Request::method() == 'POST'){ // print_r(Request::method());exit; $all = Request::param(); $update = Db::table('shop_goods')->where('id',$all['id'])->update($all); if($update){ echo json_encode(['code'=>0,'msg'=>'修改成功']); }else{ echo json_encode(['code'=>1,'msg'=>'修改失败']); } }else{ // print_r(Request::method());exit; $id = Request::param('id'); $shop = Db::table('shop_goods')->where('id',$id)->find(); $cat = Db::table('shop_cat')->where('status',1)->select(); View::assign([ 'shop' => $shop, 'cat' => $cat ]); return View::fetch(); }}
三、示例:修改数据
controller代码
public function edit(){ if(Request::method() == 'POST'){ // print_r(Request::method());exit; $all = Request::param(); $update = Db::table('shop_goods')->where('id',$all['id'])->update($all); if($update){ echo json_encode(['code'=>0,'msg'=>'修改成功']); }else{ echo json_encode(['code'=>1,'msg'=>'修改失败']); } }else{ // print_r(Request::method());exit; $id = Request::param('id'); $shop = Db::table('shop_goods')->where('id',$id)->find(); $cat = Db::table('shop_cat')->where('status',1)->select(); View::assign([ 'shop' => $shop, 'cat' => $cat ]); return View::fetch(); }}
view代码:edit.html
<!DOCTYPE html><html><head> <title></title> <link rel="stylesheet" type="text/css" href="/static/layui/css/layui.css"> <script type="text/javascript" src="/static/layui/layui.js"></script></head><body style="padding:10px;"> <form class="layui-form"> <input type="hidden" name="id" value="{$shop.id}"> <div class="layui-form-item"> <label class="layui-form-label">标题</label> <div class="layui-input-inline"> <input type="text" class="layui-input" name="title" value="{$shop.title}"> </div> </div> <div class="layui-form-item"> <label class="layui-form-label">分类</label> <div class="layui-input-inline"> <select name="cat"> <option value=0 {if $shop['cat']==0} selected {/if}></option> {volist name="cat" id="cat_v"} <option value="{$cat_v['id']}" {if $shop['cat']==$cat_v['id']} selected {/if}>{$cat_v['name']}</option> {/volist} </select> </div> </div> <div class="layui-form-item"> <label class="layui-form-label">原价</label> <div class="layui-input-inline"> <input type="text" class="layui-input" name="price" value="{$shop.price}"> </div> </div> <div class="layui-form-item"> <label class="layui-form-label">折扣</label> <div class="layui-input-inline"> <input type="text" class="layui-input" name="discount" value="{$shop.discount}"> </div> </div> <div class="layui-form-item"> <label class="layui-form-label">库存</label> <div class="layui-input-inline"> <input type="text" class="layui-input" name="stock" value="{$shop.stock}"> </div> </div> <div class="layui-form-item"> <label class="layui-form-label">状态</label> <div class="layui-input-inline"> <select name="status"> <option value="1" {if $shop['status']==1} selected {/if}>开启</option> <option value="2" {if $shop['status']==2} selected {/if}>关闭</option> </select> </div> </div> </form> <div class="layui-form-item"> <div class="layui-input-block"> <button class="layui-btn" onclick="save()">保存</button> </div> </div> <script type="text/javascript"> layui.use(['layer','form'],function(){ form = layui.form; layer = layui.layer; $ = layui.jquery; }); function save(){ $.post('/index.php/Index/edit',$('form').serialize(),function(res){ if(res.code>0){ layer.alert(res.msg,{icon:2}); }else{ layer.msg(res.msg); setTimeout(function(){parent.window.location.reload();},1000); } },'json'); } </script></body></html>
四、示例:增加数据
controller代码
public function add(){ if(Request::method() == 'POST'){ $all = Request::param(); $insert = Db::table('shop_goods')->insert($all); if($insert){ echo json_encode(['code'=>0,'msg'=>'添加成功']); }else{ echo json_encode(['code'=>1,'msg'=>'添加失败']); } }else{ $cat = Db::table('shop_cat')->where('status',1)->select(); View::assign([ 'cat' => $cat ]); return View::fetch(); }}
view代码:add.html
<!DOCTYPE html><html><head> <title></title> <link rel="stylesheet" type="text/css" href="/static/layui/css/layui.css"> <script type="text/javascript" src="/static/layui/layui.js"></script></head><body style="padding:10px;"> <form class="layui-form"> <div class="layui-form-item"> <label class="layui-form-label">标题</label> <div class="layui-input-inline"> <input type="text" class="layui-input" name="title" value=""> </div> </div> <div class="layui-form-item"> <label class="layui-form-label">分类</label> <div class="layui-input-inline"> <select name="cat"> <option value=0 selected></option> {volist name="cat" id="cat_v"} <option value="{$cat_v['id']}">{$cat_v['name']}</option> {/volist} </select> </div> </div> <div class="layui-form-item"> <label class="layui-form-label">原价</label> <div class="layui-input-inline"> <input type="text" class="layui-input" name="price" value=""> </div> </div> <div class="layui-form-item"> <label class="layui-form-label">折扣</label> <div class="layui-input-inline"> <input type="text" class="layui-input" name="discount" value=""> </div> </div> <div class="layui-form-item"> <label class="layui-form-label">库存</label> <div class="layui-input-inline"> <input type="text" class="layui-input" name="stock" value=""> </div> </div> <div class="layui-form-item"> <label class="layui-form-label">状态</label> <div class="layui-input-inline"> <select name="status"> <option value="1" selected>开启</option> <option value="2">关闭</option> </select> </div> </div> </form> <div class="layui-form-item"> <div class="layui-input-block"> <button class="layui-btn" onclick="save()">保存</button> </div> </div> <script type="text/javascript"> layui.use(['layer','form'],function(){ form = layui.form; layer = layui.layer; $ = layui.jquery; }); function save(){ $.post('/index.php/Index/add',$('form').serialize(),function(res){ if(res.code>0){ layer.alert(res.msg,{icon:2}); }else{ layer.msg(res.msg); setTimeout(function(){parent.window.location.reload();},1000); } },'json'); } </script></body></html>
五、示例:删除数据
controller代码
public function del(){ $id = Request::param('id'); $delete = Db::table('shop_goods')->where('id',$id)->delete(); if($delete){ echo json_encode(['code'=>0,'msg'=>'删除成功']); }else{ echo json_encode(['code'=>1,'msg'=>'删除失败']); }}
view代码:index.html
{include file="public/head" /}{include file="public/left" /}<div class="main" style="padding:10px;"> <div class="content"> <span>商品列表</span> <button class="layui-btn" onclick="add()">添加</button> <div></div> </div> <table class="layui-table"> <thead> <tr> <th>ID</th> <th>商品标题</th> <th>分类</th> <th>原价</th> <th>折扣</th> <th>现价</th> <th>库存</th> <th>状态</th> <th>添加时间</th> <th>操作</th> </tr> </thead> <tbody> {volist name="right" id="right_v"} <tr> <td>{$right_v.id}</td> <td>{$right_v.title}</td> <td>{$right_v.cat}</td> <td>{$right_v.price}</td> <td>{$right_v.discount}</td> <td> {if $right_v.discount!=0} {$right_v.price*($right_v.discount/10)} {else/} {$right_v.price} {/if} </td> <td>{$right_v.stock}</td> <td>{if $right_v['status']==1}开启{else/}关闭{/if}</td> <td>{$right_v.add_time|date='Y-m-d'}</td> <td> <button class="layui-btn layui-btn-xs" onclick="edit({$right_v.id})">编辑</button> <button class="layui-btn layui-btn-danger layui-btn-xs" onclick="del({$right_v.id})">删除</button> </td> </tr> {/volist} </tbody> </table></div>{include file="public/bottom" /}<script type="text/javascript"> function add(){ layer.open({ type: 2, title: '添加', shade: 0.3, area: ['480px', '440px'], content: '/index.php/index/add' }); } function edit(id){ layer.open({ type: 2, title: '编辑', shade: 0.3, area: ['480px', '440px'], content: '/index.php/index/edit?id='+id }); } function del(id){ layer.confirm('确定要删除吗?', { icon:3, btn: ['确定','取消'] }, function(){ $.post('/index.php/index/del',{'id':id},function(res){ if(res.code>0){ layer.alert(res.msg,{icon:2}); }else{ layer.msg(res.msg); setTimeout(function(){window.location.reload();},1000); } },'json'); }); }</script>
六、请求信息
序号 | 方法 | 说明 |
---|---|---|
1 | host | 当前访问域名或者IP |
2 | scheme | 当前访问协议 |
3 | port | 当前访问的端口 |
4 | remotePort | 当前请求的REMOTE_PORT |
5 | protocol | 当前请求的SERVER_PROTOCOL |
6 | contentType | 当前请求的CONTENT_TYPE |
7 | domain | 当前包含协议的域名 |
8 | subDomain | 当前访问的子域名 |
9 | panDomain | 当前访问的泛域名 |
10 | rootDomain | 当前访问的根域名 |
11 | url | 当前完整URL |
12 | baseUrl | 当前URL(不含QUERY_STRING) |
13 | query | 当前请求的QUERY_STRING参数 |
14 | baseFile | 当前执行的文件 |
15 | root | URL访问根地址 |
16 | rootUrl | URL访问根目录 |
17 | pathinfo | 当前请求URL的pathinfo信息(含URL后缀) |
18 | ext | 当前URL的访问后缀 |
19 | time | 获取当前请求的时间 |
20 | type | 当前请求的资源类型 |
21 | method | 当前请求类型 |
22 | rule | 当前请求的路由对象实例 |
23 | controller | 当前请求的控制器名 |
24 | action | 当前请求的操作名 |
print_r( Request::host() );print_r( Request::url() );print_r( Request::controller() );print_r( Request::action() );
七、HTTP头信息
HTTP请求头信息的名称不区分大小写,并且_会自动转换为-
print_r( Request::header() );print_r( Request::header('accept_encoding') );