• 中文
    • English
  • 注册
  • 查看作者
  • 7:ThinkPHP:Request和Response

    一.  获取Request对象

    之前我们已经说过,因为THinkPHP是一个单入口的框架,所有的请求都通过public下的index.php接受,并由该文件转发到相应的功能代码中,我们可以使用Request这个对象接受和处理请求参数。获取请求对象有以下三种方式:

    <?php
    namespace app\index\controller;
    use think\Request;
    
    class Index
    {
        public function index(Request $request)
        {
    
            //$request = request();方法一
    
            //$request = Request::instance();  方法二
    
            //index(Request $request); 方法三,常用
    
    
            dump($request);
        }
       
    }

    值得注意的是,Request是单例模式的一个应用,只能初始化一次。

    二.  利用Request对象接受和处理参数

    利用Request对象可以获取各种信息,具体可以查看Request类的实现,Request类地址:/thinkphp/library/think/Request.php

    <?php
    
    namespace app\index\controller;
    
    use think\Request;
    
    class Index
    {
    
        public function index(Request $request)
        {
            # 访问:http://localhost/index/index/index/price/2.html?name=luffy&age=19
            #获取URL信息
            dump($request->domain());  #    http://localhost
            dump($request->pathinfo());#    index/index/index/price/2.html
            dump($request->path());    #    index/index/index/price/2
            dump($request->url());     #    /index/index/index/price/2.html?name=luffy&age=19
            dump($request->baseUrl()); #    /index/index/index/price/2.html
    
            #获取请求类型
            dump($request->method());  #    GET
            dump($request->isGet());   #    true
            dump($request->isAjax());  #    false
    
            #获取请求参数
            dump($request->get());      # array (size=2)'name' => string 'luffy'    'age' => string '19'
    
            #从5.0开始,想获取pathinfo中的参数只能用param,之前可以用get,param还可以接受get和post中的参数
            dump($request->param());
            # array (size=2)'name' => string 'luffy'    'age' => string '19'  'price' => string '2' (length=1)
    
    
            #session、cookie
            session("name", "zhangjia");# 设置session
            dump($request->session());# array (size=1) 'name' => string 'zhangjia' (length=8)
            cookie("age", 22);  # 设置cookie
            dump($request->cookie());
            /*
               array (size=2)         
              'PHPSESSID' => string 'uovef2bnl9beccelovs262pkl3' (length=26)
              'age' => int 22
            */
    
    
    
            #获取模块
            dump($request->module());  # index
    
            #获取控制器
            dump($request->controller()); # Index
    
            #获取操作
            dump($request->action()); # index
    
    
        }
    
    
    
        public function test()
        {
            return "test";
        }
    }

    三.  input助手函数

    ThinkPHP框架中,助手函数都是在/thinkphp/helper.php中定义的,input函数可以更方便的获取get、 post、 put、 patch、 delete、 route、 param、 request、 session、 cookie、 server、 env、 path、 file中的参数。

    <?php
    namespace app\index\controller;
    use think\Request;
    class Index
    {
      
        public function index(Request $request)
        {
    
                dump(input("name")); # 从param()中获取key为name 的值
                dump(input("post.name")); # 从param()的post请求的参数中获取key为name 的值,如果没有,输出NULL
                dump(input("session.name",100)); # 如果不存在,则默认值为100
                
                dump(input("age")); # '19'
                dump(input("age/d")); # 19 #强制转换为int
                # s:字符串
                # d:整型
                # b:布尔
                # a:数组
                # f:浮点
    
        }
    }

    四.  响应对象Response

    接下来以一个简单的例子来实现动态的设置响应格式:

    <?php
    
    namespace app\api\controller;
    
    use think\Config;
    use think\Controller;
    
    class Index extends Controller
    {
        public function index($type)
        {
            if (!in_array($type, ['json', 'xml'])) {  # 搜索$type的值是否在['json','xml']数组中
                $type = 'json';
            }
    
            Config::set('default_return_type', $type);
            $data = ['name' => "zhangjia"];
            return $data;
        }
    
    
    }

    参考资料

    本文内容根据慕课网乌云龙老师:快速入门ThinkPHP 5.0–基础篇ThinkPHP官方文档整理而成

  • 0
  • 0
  • 0
  • 3.2k
  • zjmarina

    请登录之后再进行评论

    登录
    单栏布局 侧栏位置: