请求变量

  1. Request 对象支持全局变量的检测、获取和安全过滤,支持$_GET、$_POST…等;
    2. 为了方便演示,这里一律使用 Facade 的静态调用模式;
    3. 使用 has()方法,可以检测全局变量是否已经设置:
    1. dump(Request::has('id', 'get'));
    2. dump(Request::has('username', 'post'));
  2. Request 支持的所有变量类型方法,如下表:
    image.png
    5. param()变量方法是自动识别 GET、POST 等的当前请求,推荐使用;
    1. //获取请求为 name 的值,过滤
    2. dump(Request::param('name'));
    3. //获取所有请求的变量,以数组形式,过滤
    4. dump(Request::param());
    5. //获取所有请求的变量(原始变量),不包含上传变量,不过滤
    6. dump(Request::param(false));
    7. //获取所有请求的变量,包含上传变量,过滤
    8. dump(Request::param(true));
  3. 如果使用依赖注入的方式,可以将变量作为对象的属性进行调用;
    1. public function read(\think\Request $request) {
    2. return $request->name;
    3. }
  4. 如果采用的是路由 URL,也可以获取到变量,但 param::get()不支持路由变量;
    1. public function edit($id) {
    2. dump(Request::param());
    3. dump(Request::route());
    4. // 路由请求不支持 get 变量
    5. dump(Request::get());
    6. // get 变量不支持路由请求
    7. }
  5. 注意:除了::server()和::env()方法外,其它方法传递的变量名区分大小写;
    9. 因为::server()和::env()属于系统变量,会强制转换为大写后获取值;
    10. 如果获取不到值,支持请求的变量设置一个默认值;
    1. dump(Request::param('name', 'nodata'));
  6. 对于变量的过滤,在全局设置一个过滤函数,也可以单独对某个变量过滤;
    1. 'default_filter' => 'htmlspecialchars',
    2. Request::param('name', '', 'htmlspecialchars');
    3. Request::param('name', '', 'strtoupper');
  7. 使用 only()方法,可以获取指定的变量,也可以设置默认值;
    1. dump(Request::only('id,name'));
    2. dump(Request::only(['id','name']));
    3. dump(Request::only(['id'=>1,'name'=>'nodata']));
  8. 使用 only()方法,默认是 param 变量,可以在第二参数设置 GET、POST 等;
    1. dump(Request::only(['id','name'], 'post'));
  9. 相反的 except()方法,就是排除指定的变量;
    1. dump(Request::except('id,name'));
    2. dump(Request::except(['id','name']));
    3. dump(Request::except(['id'=>1,'name'=>'nodata']));
    4. dump(Request::except(['id','name'], 'post'));
  10. 使用变量修饰符,可以将参数强制转换成指定的类型;
    16. /s(字符串)、/d(整型)、/b(布尔)、/a(数组)、/f(浮点);
    1. Request::param('id/d');