温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

Laravel中用户数据的获取和处理

发布时间:2021-03-02 10:36:03 来源:亿速云 阅读:271 作者:清风 栏目:编程语言

这篇文章主要为大家展示了Laravel中用户数据的获取和处理,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带大家一起来研究并学习一下“Laravel中用户数据的获取和处理”这篇文章吧。

Laravel 是什么

Laravel 是一套简洁、优雅的PHP Web开发框架。它可以让你从面条一样杂乱的代码中解脱出来;它可以帮你构建一个完美的网络APP,而且每行代码都可以简洁、富于表达力。

本来讲完路由和控制器,应该接着讲一讲视图的,但是鉴于视图的功能实在太枯燥,况且是前端页面,免不了写一些js和css。而laravel是偏重后端的,所以为了给后端的开发同学缓冲的时间,我们跳过视图,先来说说用户数据的获取和处理,这几乎是任何应用必备之功能。

用户数据同时又是危险的!本文不会教你规避危险!

代码时间

我们在讲路由规划的时候,说了如何使用url的位置参数绑定的方式进行导向,其实那也是一种获取用户输入数据的方式,

只不过,传入的位置参数一般都人畜无害,公开访问,任你来来往往。

如果是单个用户的私密数据,必然是不能直接url内嵌传输的。

laravel把用户的输入存储在 Input 对象内,而从逻辑上看,用户输入应该归属于请求项的,所以 Request 也继承了 Input 的方法和数据。

比如有下面的路由:

Route::post('form', function (Illuminate\Http\Request $request) {
    // $request->method()});

模拟的是一个表单地址,通过post方法传送数据,然后使用 Request 方法。可供使用的获取方法,我们一一道来。

先说说 $request->all(),这一个是打印所有的输入数据,比如表单内可能有下面这些字段。HTML 内容你们将就看一下哈!

<form method="post" action="/post-route?utm=12345">
    {{ csrf_field() }}    <input type="text" name="firstName">
    <input type="submit"></form>

为了调试数据,我们的路由这样注册:

Route::post('/post-route', function (Request $request) {
    var_dump($request->all());});

大家猜猜会输出些什么内容呢?

/**
* [
* '_token' => 'CSRF token here',
* 'firstName' => 'value',
* 'utm' => 12345
* ]
*/

没错儿,就是看到的post表单的字段 firstName,还有 querystring 的查询参数 utm,还有一个是用于 CSRF 防护的laravel内置函数,默认的表单字段就是 __token,所以大可不必费心。

但是有代码洁癖的同学会觉得受不了,这个不是我的字段,我在代码里也用不到,我不想看到这个 __token,这个陌生的变量。可以,我们在请求参数内直接过滤掉就好了:

Route::post('/post-route', function (Request $request) {
    var_dump($request->except('_token'));});

其中,except() 方法就是用来过滤某些字段,不需要使用的。与之对应的就是 only() 方法,是指定哪些是用的字段。这样用:

$request->only(['firstName', 'utm']);

还有些时候逻辑判断有些键是否存在,laravel提供了两种方式判断是否存在,一个是 has ,一个是 exists。有同学会疑问,为什么有了 has还要 exists呢?因为他们的作用不同。

has方法不仅会判断该键存在,如果该键的值是 (比如 null,空字符串,false,0,空数组,空对象等等),也是判断为false的。所以就有必要使用 exists 单纯地判断键的存在与否,大家用的时候一定要注意这个细微的差别

用法很简单,直接调用方法即可:

if ($request->has('utm')) {
    // Do some work}

如果对于输入值键不存在,我们也可以为其设置一个默认值,这就是 input 方法的第二个参数,使用如下调用:

Route::post('/post-route', function (Request $request) {
    $userName = $request->input('name', 'anonymous');});

如果用户没有传入 name 字段,那么就用 anonymous 替代。

上面说的都是简单的键值对,还有一种表单,传入的字段可能会是数组,比如下面这个:

<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]">
    <input type="submit"></form>

laravel内获取数组可以使用点式方式读取,这是因为laravel解析的时候使用了助手类 Arr 的通用方法。比如获取某个键:

$employeeZeroFirstName = $request->input('employees.0.firstName');

明确地指定键名,并对应好层级即可。还可以使用星号匹配某一层级所有的键:

$allLastNames = $request->input('employees.*.lastName');

或者仅指定某个键,后面不管多少层级原样返回:

$employeeOne = $request->input('employees.1');

以上就是关于“Laravel中用户数据的获取和处理”的内容,如果改文章对你有所帮助并觉得写得不错,劳请分享给你的好友一起学习新知识,若想了解更多相关知识内容,请多多关注亿速云行业资讯频道。

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI