4.8 获取输入数据

ThinkPHP 5对PHP的原始输入做了包装,添加了过滤来保证输入数据的合法性。ThinkPHP 5使用请求实例的param等方法来获取输入的数据。所有获取方法如表4-1所示。

表4-1 获取输入数据的方法

代码示例:

     $request = Request::instance();
     // 获取name
     $name = $request->param('name');
     // 获取所有请求数据(经过过滤)
     $all = $request->param();
     // 获取所有数据(不经过过滤)
     $all = $request->param(false);
     // 获取get
     $name = $request->get('name');
     // 获取所有get数据(经过过滤)
     $all = $request->get();
     // 获取所有get数据(不经过过滤)
     $all = $request->get(false);
     //其他类似

4.8.1 数据过滤方法

全局的过滤方法为default_filter配置,每个函数名之间以半角逗号分隔。

非全局的过滤方法是在调用数据获取方法时传入的,代码如下:

         Request::instance()->get('name','','htmlspecialchars,strip_tags'
     );

4.8.2 获取部分数据

使用Request实例的only方法可以获取部分需要的数据,代码如下:

     Request::instance()->only(['id','name']);

4.8.3 排除部分数据

与上面的操作相反,有时我们需要排除敏感数据的输入,这时可以使用Request实例的except方法,代码如下:

     Request::instance()->except(['password']);//排除密码字段的输入

4.8.4 数据类型处理

由于外部传入的数据是字符串型(JSON除外),因此如果需要在程序中处理数据类型相关的业务就不得不手动进行转换。实际上,框架已经帮我们想到了,使用数据类型修饰符可以在获取的时候转换完成了。

     Request::instance()->param('name/s'); // 字符串型
     Request::instance()->param('age/d');  // 整数型
     Request::instance()->param('agree/b'); // 布尔型
     Request::instance()->param('percent/f'); // 浮点型
     Request::instance()->param('list/a'); // 数组