## 场景
我们需要对每一个新生成的用户自动生成token,如果这个方法写在控制器里会显得非常臃肿,不美观,而且token应该是在用户实例入库之前就生成好.
我们在User模型加入以下方法,在用户注册前就自动生成好token. boot() 方法会在用户模型类完成初始化之后进行加载,因此我们对事件的监听需要放在该方法中。
~~~
public static function boot()
{
parent::boot();
static::creating(function($user){
$user->token = bcrypt(str_random(60));
});
}
~~~
### 还有第二种写法
1. 在app/文件夹下建立Observers文件夹.
2. 在Observers文件夹下建立相关类.
~~~
<?php
namespace App\Observers;
use App\User;
class UserObserver
{
public function creating(User $user)
{
$user->activation_token = bcrypt(str_random(60));
}
}
~~~
在app/Providers/EventServiceProvider.php 文件boot()方法内
~~~
public function boot()
{
parent::boot();
User::observe(new UserObserver());
}
~~~
或者在AppServiceProvider中的boot()方法注册此观察者
~~~
public function boot()
{
// 为 User 模型注册观察者
User::observe(UserObserver::class);
}
~~~