Laravel中批量赋值Mass-Assignment的真正含义详解
发布:smiling 来源: PHP粉丝网 添加日期:2021-08-09 14:26:15 浏览: 评论:0
Laravel作为在国内国外都颇为流行的PHP框架,风格优雅,其拥有自己的一些特点,下面这篇文章主要给大家介绍了关于Laravel中批量赋值Mass-Assignment的真正含义,需要的朋友可以参考借鉴,下面随着小编来一起学习学习吧。
前言
很多人初次遇到 批量赋值 的时候,很容易理解成 批量添加多条数据,实际并非如此。下面话不多说了,请看下面的例子。
假设用户表 users 结构如下,且通过 is_admin 字段值为 1 或 0 来判断用户是否为 管理员,其中 is_admin 字段默认值为 0:
- +----+-----------+------------------+----------+--------------------------------------------------------------+
- | id | name | email | is_admin | password |
- +----+-----------+------------------+----------+--------------------------------------------------------------+
- | 1 | seekerliu | me@seekerliu.com | 1 | $2y$10$RL6r.MwoJd.oOvKRYhUpmeQI6hUpoG/KgGNhA6X5JrRqfVbooCs92 |
- +----+-----------+------------------+----------+--------------------------------------------------------------+
正常情况下,我们通过这种方式新建一个 普通 用户:
- public function store (Request $request)
- {
- $user = new \App\User;
- // 赋值
- $user->name = $request->name;
- $user->email = $request->email;
- $user->password = bcrypt($request->password);
- // 新建一个用户
- $user->save();
- }
为了方便,我们可以使用 $request->all() 获取用户提交的所有表单数据:
- public function store (Request $request)
- {
- $user = new \App\User;
- // Mass-Assignment 批量赋值
- $data = $request->all();
- // 新建一个用户
- $user->create($data);
- }
这种情况下,如果用户提交正确的表单数据,例如: ['name' => 'liu', 'email' => 'liu@seekerliu.com', 'password' => 'test'] ,会新建一个 普通 用户。
但只要用户在表单中伪造一个 ['is_admin' => 1] 字段,就能新建一个 管理员 用户。
这种通过将一大堆数据同时传递给模型的 create() 方法来新建一行的方式就是 Mass-Assignment (批量赋值) 。
Laravel 提供了保护 Mass-Assignment 的方法,那就是在模型上定义 fillable 或 guarded 的属性,例如:
- class User extend Model
- {
- protected $fillable = ['name', 'email', 'password'];
- }
或:
- class User extend Model
- {
- protected $guarded = ['is_admin'];
- }
这样,在执行 create() 方法时,Eloquent 模型会先使用 fill() 方法对数据进行过滤,去掉 $fillable 以外的字段(白名单),或去掉 $guarded 中的字段(黑名单),来保证只获取预期的表单字段。
以上就是 Laravel 的 Mass-Assignment 。
Tags: Laravel Mass-Assignment
相关文章
- ·Laravel 5.6中的CURD操作(代码示例详解)(2020-01-15)
- ·如何在laravel 5中创建用于XSS防御的中间件? (2020-01-16)
- ·关于Laravel重定向的七种方法详解(2020-01-26)
- ·如何在laravel 5中使用DB事务?(2020-01-31)
- ·Laravel中如何给图片加水印?(2020-04-05)
- ·Laravel框架数据库CURD操作、连贯操作总结(2021-04-10)
- ·Laravel框架路由配置总结、设置技巧大全(2021-04-10)
- ·Laravel框架中扩展函数、扩展自定义类的方法(2021-04-10)
- ·跟我学Laravel之快速入门(2021-04-16)
- ·跟我学Laravel之安装Laravel(2021-04-16)
- ·跟我学Laravel之配置Laravel(2021-04-16)
- ·跟我学Laravel之请求(Request)的生命周期(2021-04-16)
- ·跟我学Laravel之路由(2021-04-16)
- ·跟我学Laravel之请求与输入(2021-04-17)
- ·跟我学Laravel之视图 & Response(2021-04-17)
- ·laravel安装和配置教程(2021-04-19)
推荐文章
热门文章
最新评论文章
- 写给考虑创业的年轻程序员(10)
- PHP新手上路(一)(7)
- 惹恼程序员的十件事(5)
- PHP邮件发送例子,已测试成功(5)
- 致初学者:PHP比ASP优秀的七个理由(4)
- PHP会被淘汰吗?(4)
- PHP新手上路(四)(4)
- 如何去学习PHP?(2)
- 简单入门级php分页代码(2)
- php中邮箱email 电话等格式的验证(2)