zoukankan      html  css  js  c++  java
  • ThinkPHP之TP5 Request请求类

    TP5 Request请求类

    获取请求信息

    • 获取请求信息
      • 使用 hinkRequest
        • hinkphplibrary hinkRequest.php
        • $request = hinkRequest::instance();
      • 使用助手函数
        • hinkphphelper.php
        • $request = request();

    获取param变量

    • 获取param变量
      • param变量是框架提供的用于自动识别GET POST PUT请求的一种变量获取方式
      • param方法会把当前请求类型的参数和PATH_INFO变量以及GET请求合并
    # Request类的实现
    // 获取当前请求的name变量
    Request::instance()->param('name');
    // 获取当前请求的所有变量(经过过滤)
    Request::instance()->param();
    // 获取当前请求的所有变量(原始数据)
    Request::instance()->param(false);
    // 获取当前请求的所有变量(包含上传文件)
    Request::instance()->param(true);
    
    # 使用助手函数实现
    input('param.name');
    input('param.');
    # 或者
    input('name');
    input('');
    
    # 单独获取get变量或者post变量
    Request::instance()->get();
    Request::instance()->post();
    input('get.');
    input('post.');
    

    变量过滤

    • 设置全局过滤规则

      • default_filter => 'htmlspecialchars'
    • 使用Request对象进行全局变量的获取过滤

      • 过滤方式包括函数、方法过滤
      • PHP内置的Types of fillers
      • Request::instance()->filter('htmlspecialchars');
      • Request::instance()->filter(['strip_tags','htmlspecialchars']);
    • 在获取变量的时候添加过滤方法

      • 获取get变量,并用htmlspecialchars函数过滤
        • Request::instance()->get('name','','htmlspecialchars');
      • 获取param变量,并用strip_tags函数过滤
        • Request::instance()->param('username','','strip_tags');
      • 获取post变量,并用orgFilter类的safeHtml方法过滤
        • Request::instance()->post('name','','org::Filter');
    • 路由变量与get变量

      • http://www.tpshop.com/home/test/index/id/100?page=10
      • param方法: 能够获取所有参数(id, page)
      • get方法: 只能获取?后面的请求字符串的参数(page)
      • route方法: 只能获取到?前面的路由中的参数(id)

    参数绑定

    • 概念
      • 参数绑定方式默认是按照变量名进行绑定
      • 例如,给Blog控制器定义了两个操作方法readarchive方法
        • read操作需要指定一个id参数
        • archive方法需要指定年份year和月份month两个参数
    namespace appindexController;
    
    class Blog
    {
      public function read($id)
      {
        return 'id='.$id;
      }
    
      public function archive($year='2021',$month='03')
      {
        return 'year='.$year.'&month='.$month;
      }
    }
    
    • URL的访问地址分别是
      • http://serverName/index.php/index/blog/read/id/5
      • http://serverName/index.php/index/blog/archive/year/2021/month/08

    依赖注入

    • 概念

      • 要在一个类A中使用另一个依赖类B时
      • 不直接在类A中实例化类B
      • 而是先实例化类B后再以参数的形式传入类A
    • 操作方法注入

      • 控制器的操作方法中如果需要调用请求对象Request
      • 可以在方法中定义Request类型的参数,并且与参数顺序无关
      • 访问URL地址的时候,无需传入request参数
      • 系统会自动注入当前的Request对象实例到该参数
    namespace appindexcontroller;
    
    use thinkRequest;
    
    class Index
    {
      public function hello(Request $request)
      {
        return 'Hello,'.$request->param('name').'!';
      }
    }
    
    • 方法继承注入
      • 如果继承了系统的Controller类的话,也可以直接调用request属性
    namespace appindexcontroller;
    
    use thinkRequest;
    
    class Index extends Controller
    {
      public function hello()
      {
        return 'Hello,'.$this->request->param('name').'!';
      }
    }
    
    • 依赖注入原理分析
    # 实例化普通写法
    <?php
    class User{
      public function getName()
      {
        return 'user-name';
      }
    }
    
    class Goods{
      public function detail()
      {
        // 实例化User类
        $user= new User();
        $username= $user->getName();
        return $username;
      }
    }
    
    $goods= new Goods();
    echo $goods->detail();
    ?>
    
    # 依赖注入写法
    <?php
    class User{
      public function getName()
      {
        return 'user-name';
      }
    }
    
    class Goods{
      public function detail(User $user)
      {
        // 获取用户名
        $username= $user->getName();
        return $username;
      }
    }
    
    $goods= new Goods();
    // 先实例化User类
    $user= new User();
    echo $goods->detail($user);
    ?>
    
    • 接收请求参数总结
    //1.获取请求对象  
    $request = request();
    $request = 	hinkRequest::instance();
    $request = $this->request; //仅限于继承了底层控制器的情况下
    public function save(Request $request)  //依赖注入
       //2. 接收请求参数 param方法
        $params = $request->param();
        $params = input();
        $params = request()->param();
        $id = $request->param('id');
        $id = input('id');
        public function edit($id)//参数绑定
    
  • 相关阅读:
    Codeforces Round #433 (Div. 2, based on Olympiad of Metropolises)
    树的遍历(前序中序求后序,后序中序求前序)
    Codeforces Round #439 (Div. 2)
    python3 调用百度api实现语音识别
    Win10 opencv cuda + 扩展库 vs2019 cuda10
    flask读取摄像头并实时显示
    树莓派设置开机启动
    树莓派python OLED使用
    UART Fingerprint Sensor (C)树莓派使用
    树莓派全版本换源(多环境测试无误版)
  • 原文地址:https://www.cnblogs.com/SharkJiao/p/14186236.html
Copyright © 2011-2022 走看看