## 場景
我們需要對每一個新生成的用戶自動生成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);
}
~~~