菜单 学习猿地 - LMONKEY

VIP

开通学习猿地VIP

尊享10项VIP特权 持续新增

知识通关挑战

打卡带练!告别无效练习

接私单赚外块

VIP优先接,累计金额超百万

学习猿地私房课免费学

大厂实战课仅对VIP开放

你的一对一导师

每月可免费咨询大牛30次

领取更多软件工程师实用特权

入驻
32
0

Laravel 获取用户请求信息

原创
05/13 14:22
阅读数 466

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
32 点赞
0 评论
收藏
为你推荐 换一批