laravel模型事件的基本应用
1、创建观察者(-m 指定依赖注入绑定的模型)
php artisan make:observer UserObserver -m Models/Users
2、在模型类中添加此方法(boot方法)
<?php
namespace AppModels;
use AppObserversUserObserver;
use IlluminateFoundationAuthUser as Authenticatable;
use IlluminateNotificationsNotifiable;
use IlluminateDatabaseEloquentSoftDeletes;
use TymonJWTAuthContractsJWTSubject;
class Users extends Authenticatable implements JWTSubject
{
use Notifiable, SoftDeletes;
//使用laravel提供的模型类初始化方法
// 此方法 是所有方法中最早执行的
protected static function boot()
{
parent::boot();
//注册自定义观察类
self::observe(UserObserver::class);
}
public $table = 'users';
// const CREATED_AT = 'created_at';
// const UPDATED_AT = 'updated_at';
//设置添加的字段 create 添加数据有效
//黑名单 拒绝哪些字段不能被添加的
protected $guarded = [];
//指定软删除标识字段
protected $dates = ['deleted_at'];
/**
* The attributes that should be hidden for arrays.
*
* @var array
*/
protected $hidden = [
'password',
];
//实现 JWTSubject 以下两个接口函数
public function getJWTIdentifier()
{
return $this->getKey();
}
public function getJWTCustomClaims()
{
return [];
}
}
3、观察者类中的代码
<?php
namespace AppObservers;
use AppModelsUsers;
use Log;
class UserObserver
{
/**
* 添加之前执行的方法
*
* @param AppModelsUsers $users
* @return void
*/
public function creating(Users $users)
{
//加密 密码
$users->password = bcrypt($users->password);
}
/**
* Handle the users "updated" event.
*
* @param AppModelsUsers $users
* @return void
*/
public function updated(Users $users)
{
//
}
/**
* Handle the users "deleted" event.
*
* @param AppModelsUsers $users
* @return void
*/
public function deleted(Users $users)
{
//
}
/**
* Handle the users "restored" event.
*
* @param AppModelsUsers $users
* @return void
*/
public function restored(Users $users)
{
//
}
/**
* Handle the users "force deleted" event.
*
* @param AppModelsUsers $users
* @return void
*/
public function forceDeleted(Users $users)
{
//
}
}
4、此例子中是用模型事件的creating方法来进行密码的加密操作,
模型事件有:retrieved、 creating、 created、 updating、 updated、 saving、 saved、 deleting、 deleted、 restoring 和 restored。除了加密密码,还可以做一些异步队列的处理,比如用户注册完账号后,可以在created方法中执行给新注册的用户发邮件操作,发邮件的操作结合队列,这样一整套流程就走通了。