引言

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

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

代码时间

我们在讲路由规划的时候,说了如何使用url的位置参数绑定的方式进行导向,其实那也是一种获取用户输入数据的方式, 只不过,传入的位置参数一般都人畜无害,公开访问,任你来来往往。

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

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

Route::post('form', function (IlluminateHttpRequest $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');

具体用法读者可以查看源码或文档,深入研究一下Arr操作类的用法。

写在最后

本文几乎涵盖了用户输入input方法的最为常用的一些方法,我们只讲了怎么正常地获取用户数据,没有讲如何验证数据有效性。因为前端验证几乎形同虚设,最后能写到数据库的数据,还是要应用程序把关。

那就是验证器的工作了,验证器,我们放到后续章节再详细地讲。

Happy coding :-)

我是@程序员小助手,专注编程知识,圈子动态的IT领域原创作者

安卓应用用户数据_3分钟短文:Laravel应用跟用户打交道,就从拿到他们的数据开始!...相关推荐

  1. laravel $request 多维数组取值_3分钟短文 | Laravel 内3种数据校验的写法,你喜欢哪一个?...

    引言 web应用程序公开访问几乎没有不带用户交互的,难免要接收用户输入的奇奇怪怪的东西.对于后端程序,必须对输入的内容进行有效性过滤. 这就是本文的重点,说一说laravel中输入请求的校验. 学习时 ...

  2. sql查询无结果返回空_3分钟短文 | Laravel 查询结果检查是不是空,5个方法你别用错...

    引言 Laravel 提供了 Eloquent ORM 对象用于操作数据库,将其进行抽象方便操作. 因为设计的灵活度,大家在使用Model查询数据集的时候,会面临结果为空,记录不存在的问题, 那么如何 ...

  3. mvc 前段定义变量_3分钟短文 | Laravel blade模板里优雅地定义PHP变量

    引言 Laravel秉持MVC的设计理念,在V = view 中放置视图相关的内容.特别是 blade 模板引擎带来了很强大的解析方式. 与传统的PHP与HTML写作一团方式不容,Blade 使用特定 ...

  4. bcb6通过https接口post数据_3分钟短文 | 有挑战!PHP用1个函数实现post请求,你用哪个?

    引言 前天的文章,我们说到了如何高效的下载网络资源,对于小体积的文件.可以便捷的使用 file_put_contents() 进行请求.与之配对的函数 file_get_contents() 则是读取 ...

  5. 语句作用_3分钟短文:Laravel模型作用域,为你“节省”更多代码

    引言 原则上代码写一次,处处是引用,不需要大量的冗余代码,这是一种趋势,也是提高代码健壮性的努力方向. laravel模型为我们提供了一层数据库操作层,将数据交互独立出来. 但是久而久之,随着项目的需 ...

  6. laravel blade include使用变量_3分钟短文:可能是Laravel模板最直白的用法了,没有之一...

    引言 上一期我们通过分配路由地址,在url中接收位置参数并传递给控制器方法, 并且在控制器内简单地打印输出接收的参数. 本期我们尝试着使用laravel的模板功能,把控制器内组装好的数据渲染到视图模板 ...

  7. request用法_3分钟短文:说说Laravel页面会话之间的数据保存Session用法

    引言 我们知HTTP请求是没有状态的,两个请求之间没有直接的关联关系.但大多数情况下, 我们需要保持用户的会话间数据的连续性,这时,为了数据安全起见, 有必要在服务器上临时存储一些上下文数据了. 这就 ...

  8. laravel $request 多维数组取值_3分钟短文:Laravel的“南天门”,过滤掉七七八八的数据...

    引言 上一章我们教会大家如何从用户表单内正确地获取数据,可是没有讲,获取到的数据到底有啥用,或者说,有的用户提交的数据压根儿就没正经填,那些错乱无效的数据,如果直接放到数据库,纯粹是对数据库的污染. ...

  9. html尾部代码_3分钟短文:Laravel Form,让你不再写 HTML 的好“库”

    引言 作为后端工程师的你,是不是面对一堆JS,CSS感觉无比抓狂.如果能摆脱大量的冗余的HTML代码块, 那该多好啊.laravel作为扩展性极强的框架,自然是为广大后端开发者赋能. 本文我们讲一个简 ...

最新文章

  1. go语言游戏编程初识--`Ebiten`
  2. javaone_JavaOne 2012:非阻塞数据结构如何工作?
  3. linux-mysql了解
  4. python入门必备10个坑_python中的基础坑
  5. 虚拟机中的linux系统无法获得ip(ifconfig命令无法查到ip)
  6. bci测试如何整改_电源动态响应测试,什么样的波形算合格?
  7. astah export sql mysql_Astah繪製UML圖形-入門篇
  8. 史上屌炸天超详细的Java实现逆波兰表达式
  9. HCNE复习参考(中)
  10. 解决:Word在试图打开文件时遇到错误
  11. 复杂背景下卷积神经网络在森林火灾识别中的研究与应用-代码实现
  12. HTTP状态码@蓝神
  13. java swing(GUI图形化界面)基础教程2-添加组件
  14. 搜索引擎下拉食云速捷详细_下拉框搜索四云 速捷超稳,下拉框搜索康云速捷优选...
  15. 这6款功能强大、堪称良心的手机浏览器,还有谁不知道
  16. STM32F407利用RT-thread上移植LWIP
  17. java 级联删除_级联删除 - Asher鑫与 - 博客园
  18. 内蒙古计算机专业单招学校,2019内蒙古高职单招公办学校名单
  19. 刷新纪录的ffit8,为代餐市场带来了什么启示?
  20. 油门刹车一个踏板全搞定!还有这波操作。。。

热门文章

  1. c语言输入系统 -- 全拼汉字输入
  2. python重命名文件excel_运用python实现提取文章title重命名
  3. 网络监控软件安装模式对比
  4. 软件开发规范和标准_【软件】ISO26262标准软件功能安全要求
  5. 新媒体管家plus(新媒体管家插件) v6.66官方最新版
  6. NAS:Openfiler 的安装与应用
  7. 安全卫士App需要的基本操作(入门概述)
  8. 爬取驾校一点通所有科目一信息
  9. 夜间灯光影像区域稳定像元提取
  10. 高通AR Unity播放器特性