【thinkphp6学习过程】ThinkPHP6 请求

ThinkPHP6 请求

  • 要使用请求对象必须使用门面方式( think\facade\Request类负责 )调用
  • 可以通过Request对象完成全局输入变量的检测、获取和安全过滤
  • 支持$_GET、$_POST、$_REQUEST、$_SERVER、$_SESSION、$_COOKIE、$_ENV等系统变量,以及文件上传信息

一、变量获取

序号方法说明
1param获取当前请求的变量
2get获取 $_GET 变量
3post获取 $_POST 变量
4put获取 PUT 变量
5delete获取 DELETE 变量
6session获取 SESSION 变量
7cookie获取 $_COOKIE 变量
8request获取 $_REQUEST 变量
9server获取 $_SERVER 变量
10env获取 $_ENV 变量
11route获取 路由(包括PATHINFO) 变量
12middleware获取 中间件赋值/传递的变量
13file获取 $_FILES 变量
14filter变量过滤
15only获取部分变量
16except排除部分变量

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="0" {if $shop['status']==0} 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、变量修饰符

序号修饰符作用
1s强制转换为字符串类型
2d强制转换为整型类型
3b强制转换为布尔类型
4a强制转换为数组类型
5f强制转换为浮点类型
Request::get('id/d');
Request::post('name/s');
Request::param('price/f');

二、请求类型

序号方法说明
1method获取当前请求类型
2has判断传值是否存在
3isGet判断是否GET请求
4isPost判断是否POST请求
5isPut判断是否PUT请求
6isDelete判断是否DELETE请求
7isAjax判断是否AJAX请求
8isPjax判断是否PJAX请求
9isJson判断是否JSON请求
10isMobile判断是否手机访问
11isHead判断是否HEAD请求
12isPatch判断是否PATCH请求
13isOptions判断是否OPTIONS请求
14isCli判断是否为CLI执行
15isCgi判断是否为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 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代码: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">
        <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="0">关闭</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代码:edit.html

<button class="layui-btn layui-btn-danger layui-btn-xs" onclick="del({$right_v.id})">删除</button>

<script type="text/javascript">
    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>

五、请求信息

序号方法说明
1host当前访问域名或者IP
2scheme当前访问协议
3port当前访问的端口
4remotePort当前请求的REMOTE_PORT
5protocol当前请求的SERVER_PROTOCOL
6contentType当前请求的CONTENT_TYPE
7domain当前包含协议的域名
8subDomain当前访问的子域名
9panDomain当前访问的泛域名
10rootDomain当前访问的根域名
11url当前完整URL
12baseUrl当前URL(不含QUERY_STRING)
13query当前请求的QUERY_STRING参数
14baseFile当前执行的文件
15rootURL访问根地址
16rootUrlURL访问根目录
17pathinfo当前请求URL的pathinfo信息(含URL后缀)
18ext当前URL的访问后缀
19time获取当前请求的时间
20type当前请求的资源类型
21method当前请求类型
22rule当前请求的路由对象实例
23controller当前请求的控制器名
24action当前请求的操作名
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') );
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

可口可乐Vip

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值