如果你对该文章中的内容有疑问/不解,可以点击此处链接提问
要注明问题和此文章链接地址 点击此处跳转
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 |
输入变量 可以通过Request对象完成全局输入变量的检测、获取和安全过滤,支持包括$_GET、$_POST、$_REQUEST、$_SERVER、$_SESSION、$_COOKIE、$_ENV等系统变量,以及文件上传信息。 检测是否存在has Request::instance()->has('id','get'); input('?get.id'); 变量获取 方法 描述 param 获取当前请求的变量 get 获取 $_GET 变量 post 获取 $_POST 变量 put 获取 PUT 变量 delete 获取 DELETE 变量 session 获取 $_SESSION 变量 cookie 获取 $_COOKIE 变量 request 获取 $_REQUEST 变量 server 获取 $_SERVER 变量 env 获取 $_ENV 变量 route 获取 路由(包括PATHINFO) 变量 file 获取 $_FILES 变量 // 获取当前请求的name变量 Request::instance()->param('name'); // 获取当前请求的所有变量(经过过滤) Request::instance()->param(); // 获取当前请求的所有变量(原始数据) Request::instance()->param(false); // 获取当前请求的所有变量(包含上传文件) Request::instance()->param(true); input('param.name'); input('param.'); 或者 input('name'); input(''); Request::instance()->get('id'); // 获取某个get变量 Request::instance()->get('name'); // 获取get变量 Request::instance()->get(); // 获取所有的get变量(经过过滤的数组) Request::instance()->get(false); // 获取所有的get变量(原始数组) Request::instance()->post('name'); // 获取某个post变量 Request::instance()->post(); // 获取经过过滤的全部post变量 Request::instance()->post(false); // 获取全部的post原始变量 Request::instance()->request('id'); // 获取某个request变量 Request::instance()->request(); // 获取全部的request变量(经过过滤) Request::instance()->request(false); // 获取全部的request原始变量数据 Request::instance()->server('PHP_SELF'); // 获取某个server变量 Request::instance()->server(); // 获取全部的server变量 Request::instance()->session('user_id'); // 获取某个session变量 Request::instance()->session(); // 获取全部的session变量 Request::instance()->cookie('user_id'); // 获取某个cookie变量 Request::instance()->cookie(); // 获取全部的cookie变量 变量过滤 默认没有过滤 // 默认全局过滤方法 用逗号分隔多个 'default_filter' => 'htmlspecialchars', 也支持使用Request对象进行全局变量的获取过滤,过滤方式包括函数、方法过滤,以及PHP内置的Types of filters,我们可以设置全局变量过滤方法,例如: Request::instance()->filter('htmlspecialchars'); 支持设置多个过滤方法,例如: Request::instance()->filter(['strip_tags','htmlspecialchars']), 也可以在获取变量的时候添加过滤方法,例如: Request::instance()->get('name','','htmlspecialchars'); // 获取get变量 并用htmlspecialchars函数过滤 Request::instance()->param('username','','strip_tags'); // 获取param变量 并用strip_tags函数过滤 Request::instance()->post('name','','org\Filter::safeHtml'); // 获取post变量 并用org\Filter类的safeHtml方法过滤 可以支持传入多个过滤规则,例如: Request::instance()->param('username','','strip_tags,strtolower'); // 获取param变量 并依次调用strip_tags、strtolower函数过滤 Request对象还支持PHP内置提供的Filter ID过滤,例如: Request::instance()->post('email','',FILTER_VALIDATE_EMAIL); 框架对FilterID做了转换支持,因此也可以使用字符串的方式,例如: Request::instance()->post('email','','email'); 采用字符串方式定义FilterID的时候,系统会自动进行一次filter_id调用转换成Filter常量。 具体的字符串根据filter_list函数的返回值来定义。 需要注意的是,采用Filter ID 进行过滤的话,如果不符合过滤要求的话 会返回false,因此你需要配合默认值来确保最终的值符合你的规范。 例如, Request::instance()->post('email','',FILTER_VALIDATE_EMAIL); 就表示,如果不是规范的email地址的话 返回空字符串。 如果当前不需要进行任何过滤的话,可以使用(V5.0.3+版本) // 获取get变量 并且不进行任何过滤 即使设置了全局过滤 Request::instance()->get('name','',null); 获取部分变量 // 只获取当前请求的id和name变量 Request::instance()->only('id,name'); 或者使用数组方式 // 只获取当前请求的id和name变量 Request::instance()->only(['id','name']); 默认获取的是当前请求参数,如果需要获取其它类型的参数,可以使用第二个参数,例如: // 只获取GET请求的id和name变量 Request::instance()->only(['id','name'],'get'); // 只获取POST请求的id和name变量 Request::instance()->only(['id','name'],'post'); 排除部分变量 也支持排除某些变量获取,例如 // 排除id和name变量 Request::instance()->except('id,name'); 或者使用数组方式 // 排除id和name变量 Request::instance()->except(['id','name']); 同样支持指定变量类型获取: // 排除GET请求的id和name变量 Request::instance()->except(['id','name'],'get'); // 排除POST请求的id和name变量 Request::instance()->except(['id','name'],'post'); 变量修饰符 input函数支持对变量使用修饰符功能,可以更好的过滤变量。 用法如下: input('变量类型.变量名/修饰符'); 或者 Request::instance()->变量类型('变量名/修饰符'); 例如: input('get.id/d'); input('post.name/s'); input('post.ids/a'); Request::instance()->get('id/d'); ThinkPHP5.0版本默认的变量修饰符是/s,如果需要传入字符串之外的变量可以使用下面的修饰符,包括: 修饰符 作用 s 强制转换为字符串类型 d 强制转换为整型类型 b 强制转换为布尔类型 a 强制转换为数组类型 f 强制转换为浮点类型 如果你要获取的数据为数组,请一定注意要加上 /a 修饰符才能正确获取到。 更改变量 // 更改GET变量 Request::instance()->get(['id'=>10]); // 更改POST变量 Request::instance()->post(['name'=>'thinkphp']); 尽量避免直接修改$_GET 或者 $_POST数据,同时也不能直接修改param变量,例如下面的操作是无效的: // 更改请求变量 Request::instance()->param(['id'=>10]); |