有这么一个应用场景。
不以明文保存用户密码,而以加密的形式保存。
按传统的思维,我会将数组传入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);
}
最后修改:2016 年 11 月 30 日
如果觉得我的文章对你有用,请随意赞赏