美文网首页
33、TP5的请求对象与参数绑定

33、TP5的请求对象与参数绑定

作者: IUVO | 来源:发表于2018-06-04 17:35 被阅读223次

    1、请求变量与请求对象的关系?

    TP5提供了请求对象,对客户端发送的请求提供统一的接口进行处理,当用户向服务器发出了请求,请求对象就会自动拦截这些请求,调用响应的方法进行处理。
    例如GET请求就会调用get()方法,POST请求就会调用post()方法,如果是cookie或者session就会调用各自对应的方法。
    这些请求方法会自动过滤掉非法请求,使得发送到服务器端的请求更加的安全可靠。

    那么什么是请求变量呢,我们来通过一个小案例的演示说明一下,修改默认模块默认控制器Index的内容:

    class Index
    {
        public function index()
        {
            return '<h2>快来和我一起学习TP5</h2>';
        }
        public function hello($name,$lesson)
        {
            return 'Hello '.$name.' ,欢迎和我一起学习'.$lesson.'课程';
        }
    }
    

    访问url为:http://tp5.com/index/index/hello/name/Mike/lesson/TP5,其中MikeTP5就是请求变量,所以说请求变量就是请求对象处理的一个目标,但是请求对象不仅仅可以处理请求变量,它可以处理一切与用户请求相关的数据。


    get()

    新增一个新的方法:

    public function demo($id='',$name='',$age=18)
    {
      $request = \think\Request::instance();//获取请求对象实例,将请求对象类实例化
      dump($request->get());//调用请求对象的get()获取url中的get请求的请求变量,get方法参数为空则获取url中所有请求变量
    }
    

    现在我们将url的参数传递方式改成get方式:

    http://tp5.com/index/index/demo?id=123&name=alice&age=28
    

    结果输出了所有url中的get请求的所有请求变量。


    post()

    我们再来尝试获取POST请求的所有请求变量,把请求对象调用的方法改成post即可:dump($request->post());,这里我图方便,用Postman来请求:

    POST请求
    也能正常输出了所有url中的post请求的所有请求变量。
    param()

    为了简化请求变量的获取,系统还提供了param()方法来获取所有请求方式的请求变量,包括getpostPATH_INFO类型,很简单,修改请求对象调用param()方法即可:dump($request->param());
    然后用各种方式去请求,发现都能正常输出了所有请求变量。

    get()post()param()参数都可以为想要获取到的请求变量的名称。


    has()

    为了判断url请求中是否存在某个请求变量,系统还提供了has()方法,返回值为布尔值,即存在某个请求变量为true,反之为false

    2、请求信息包括哪些?

    其实我们通过请求对象获取的请求信息是非常多的,主要有以下几种:

    a. 和url相关:

    例如获取域名:

    dump($request->domain()); //获取域名
    

    例如获取url

    dump($request->url()); //获取url,默认不包含域名,如果要包含域名,则需要传入参数true
    

    例如获取PATH_INFO

    dump($request->pathinfo()); //获取pathinfo
    

    例如获取url后缀:

    dump($request->ext()); //获取url后缀
    

    b. 和MCA相关;

    例如获取模块:

    dump($request->module()); //获取模块
    

    例如获取控制器:

    dump($request->controller()); //获取控制器
    

    例如获取操作:

    dump($request->action()); //获取操作
    


    我们除了可以查看MCA信息之外,还可以设置,比如说我们将当前操作重新设置一下:
    $request->action('test'); //设置操作为test
    

    同理,除了操作可以设置,模块、控制器都能重新设置,方法也是一样的,就不演示了。


    c. 和请求的方法类型相关;

    我们还能检测请求的方法类型:

    dump($request->method()); //获取请求变量的类型,输出string(3) "GET"
    

    我们还能检测请求的IP:

    dump($request->ip()); //获取请求的IP,输出string(7) "0.0.0.0"
    

    我们还能检测请求的IP:

    dump($request->ip()); //获取请求的IP,输出string(7) "0.0.0.0"
    

    除了可以获取以上请求变量以外,请求变量还支持对请求变量的限定和排除:

    dump($request->only('id')); //限定仅获取请求变量id
    
    dump($request->except('id')); //获取除了请求变量id之外的其他变量
    

    3、如何通过参数绑定来简化请求的URL地址呢?

    默认url的参数是按名称成对解析,所以需要写上参数名:

    http://tp5.com/index/index/demo/id/123/name/alice/age/28
    

    但是,还有另一种配置是按顺序解析,这个需要先配置url_param_type配置项的值为1,即按顺序解析。

    那么url就可以简化为:

    http://tp5.com/index/index/demo/123/alice/28
    

    相关文章

      网友评论

          本文标题:33、TP5的请求对象与参数绑定

          本文链接:https://www.haomeiwen.com/subject/ocpssftx.html