1. 获取请求信息的三种方式
Laravel 中获取用户请求信息有三种方式
- 注入 Illuminate\Http\Request 对象
- Request facade
- request() 助手函数
1.1 注入 Illuminate\Http\Request 对象
// 注入 Illuminate\Http\Request 对象
Route::post('form', function(Illuminate\Http\Request $request){
// 这样就注入成功了 ,然后就可以使用 $request 的各种成员来获取请求信息了
$request->input('title');
});
1.2 Request facade
// 如果要使用 facade ,必须导入完整的 facade 路径
use Illuminate\Support\facades\Request;
// 然后就能用了 ,跟 Illuminate\Http\Request 都差不多
Request::input('title');
1.3 request() 助手函数
// 使用全局助手函数就更方便了 ,直接用就好了
request()->input('title');
// 还有一个默认的规则 ,当传递一个参数时 request('title') 是 request()->input('title') 的快捷方式
request('title');
2. Illuminate\Http\Request 成员
提前说明一下继承关系
// Laravel 的 Illuminate\Http\Request 继承自 Symfony 框架的 Symfony\Component\HttpFoundation\Request
Illuminate\Http\Request extends Symfony\Component\HttpFoundation\Request;
2.1 获取请求参数的成员
成员 | 说明 | 示例 |
---|---|---|
all() | 获取所有请求参数 | $request->all() |
except() | 返回值与 all() 相同 ,但可以设置要排除的字段 ,比如 _token() | $request->except('_token') |
only() | 返回值与 all() 相同 ,但可以手动指定获取哪些字段 | $request->only(['firstName', 'lastName']) |
input() | input() 与 only() 类似 ,但只能获取单个字段的值 | $request->input('firstName') |
query() | 仅从查询字符串中获取参数值 | $request->query('queryName', 'default') |
2.2 检测请求信息的成员
成员 | 说明 | 示例 |
---|---|---|
has() | 检测请求字段是否存在 ,如果 key 存在并且为空 ,has() 会返回 false | $request->has(['name', 'email']) |
exists() | 检测请求字段是否存在 ,如果 key 存在就算是空的 ,exists() 也返回 true | $request->exists('firstName') |
is(...$patterns) | 如果当前 URI 与给定的正则表达式匹配返回 true | - |
routeIs(...$patterns) | 如果当前路由名称与给定的正则表达式匹配返回 true | - |
fullUrlIs(...$patterns) | 如果当前的 URL 与给定正则表达式匹配返回 true | - |
ajax() | 如果是 AJAX 请求返回 true | - |
pjax() | 如果是 PJAX 请求返回 true | - |
secure() | 如果是 HTTPS 请求返回 true | - |
isMethod($method) | 如果是给定的请求类型返回 true | $request->isMethod('POST') |
2.3 上传文件相关的成员
成员 | 说明 | 示例 |
---|---|---|
file() | 获取上传文件信息 ,返回 Symfony\Component\HttpFoundation\File\UploadedFile 实例 | $request->file('profile_picture') |
hasFile() | 如果请求有上传文件 ,返回 true | $request->hasFile('profile_picture') |
2.4 访问 URL 相关的成员
成员 | 说明 | 示例 |
---|---|---|
root() | 返回应用程序的根 URL | http://testl.lo |
url() | 获取请求的 URL ,不包含查询字符串 | http://testl.lo/recipse |
fullUrl() | 获取请求的 URL ,包含查询字符串 | http://testl.lo/recipse?a=b |
fullUrlWithQuery(array $query) | 根据完整的 URL 和传入的查询字符串返回一个新的 URL | $request->fullUrlWithQuery(['a' => 'b']) |
path() | 获取请求的路径信息 | - |
segments() | 返回所有的 URI 片段组成的数组 ,不包含域名 | $request->segments() |
segment($index, $default = null) | 返回指定的 URI 片段 ,路径索引是基于 1 的 | $request->segment(1) |
2.5 操作请求信息的成员
成员 | 说明 | 示例 |
---|---|---|
merge(array $input) | 将新的请求参数合并到当前请求参数中 | - |
replace(array $input) | 替换当前请求参数( 会完全覆盖 ) | - |
2.6 其他成员
成员 | 说明 | 示例 |
---|---|---|
method() | 返回请求的类型 | POST 、GET |
ip() | 返回客户端 IP | - |
ips() | 返回客户端 IP ,数组 | - |
userAgent() | 返回 User-Agent | Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.88 Safari/537.36 |
fingerprint() | 返回对当前路由 、域名 、URI 、IP 进行 sha1 计算后的散列值 | f93ae561bed07f6e902ebab927e59489c9f70934 |
instance() | 返回当前对象 | - |
3. 访问数组输入
Laravel 为访问数组类型的输入数据提供了 "." 语法
<form method="post" action="/post-route">
{{ csrf_field() }}
<input type="text" name="employees[0][firstName]" />
<input type="text" name="employees[0][lastName]" />
<input type="text" name="employees[1][firstName]" />
<input type="text" name="employees[1][lastName]" />
</form>
Route::post('/post-route', function(Request $request){
// 假如表单填写为 张 、三 、李 、四
$request->input('employees.0.firstName'); // '张'
$request->input('employees.*.lastName'); // ['三', '四']
$request->input('employees.1'); // ['firstName' => '张', 'lastName' => '三']
})
有错误的地方欢迎指出 ,或者补充也可以 ,感谢每个对我提出建议的人
本作品采用《CC 协议》,转载必须注明作者和本文链接
© 著作权归作者所有
举报
发表评论
0/200