有这么一个应用场景。
不以明文保存用户密码,而以加密的形式保存。
按传统的思维,我会将数组传入create方法之前自己加密密码明文,但是laravel有更方便的处理方式:setAttribute。
具体还可以查看中文手册:http://laravelacademy.org/post/3046.html
要定义一个修改器,需要在模型中定义setFooAttribute方法,其中Foo是你想要访问的字段(使用驼峰式命名规则)。接下来让我们为first_name属性定义一个修改器,当我们为模型上的first_name赋值时该修改器会被自动调用:
<?php
namespace App;
use Illuminate\Database\Eloquent\Model;
class User extends Model{
/**
* 设置用户的名字
*
* @param string $value
* @return string
*/
public function setFirstNameAttribute($value)
{
$this->attributes['first_name'] = strtolower($value);
}
}
该修改器获取要被设置的属性值,允许你操纵该值并设置 Eloquent 模型内部属性值为操作后的值。例如,如果你尝试设置Sally的first_name属性:
$user = App\User::find(1);
$user->first_name = 'Sally';
在本例中,setFirstNameAttribute方法会被调用,传入参数为Sally,修改器会对其调用strtolower函数并将处理后的值设置为内部属性的值。
比如我在开发中,会这样加密明文密码:
public function setPasswordAttribute($value){
$this->attributes['password']=Hash::make($value);
}
1 条评论
[…] 六、预处理 见:Laravel写入数据库前的预处理 […]