Laravel 的观察者使用记录与两种方式
根据文档的观察者,我们平时的使用方式是先创建一个App\Observers
文件夹,然后创建想要操作的模型对应的observer,比如说创建一个UserObserver
。
<?php
namespace App\Observers;
use App\User;
class UserObserver
{
}
获得这个类之后,我们需要到AppServiceProvider
的boot方法当中进行注册,也可以是其他的ServiceProvider,不固定。
public function boot()
{
User::observe(UserObserver::class);
}
别忘了引入model,做完这些我们就可以各种操作了。
laravel已经为我们预先定义了10种方法:creating
, created
, updating
, updated
, saving
, saved
, deleting
, deleted
, restoring
, restored
。
这些方法分别是进行时与完成之后。比如我们删除用户的时候,可以用deleting方法删除跟这个用户有关联的其他数据。
public function deleting(User $user)
{
Thread::where('user_id', $user->id);
}
希望弄的更清楚的,可以参考Laravel 中的模型事件与 Observer。
最近跟着TDD 构建 Laravel 论坛笔记教程做下去,发现原来还能直接在模型当中直接定义boot方法,进行同样的操作。
public static function boot()
{
static::deleting(function ($model) {
$model->threads->delete();
});
}
我预先定义了关联关系,所以取到相关的Thread能直接删除。
insert方法不会被监听到,以及批量删除时也同样不会被监听到,必须一条一条创建或者一条一条删除才行。(源码没咋研究,也不是很清楚,只是踩到过这坑)
就比如上面的代码,这样子批量删除thread是不会被监听到的,你可以这样写
$model->threads->each->delete();
题外话:
使用laravel快一年了,跟着教程学了差不多三分之一,真的学到了许多以前完全不知道的使用方式。因为有laracasts的账户,所以先过一遍视频,然后对着翻译教程再来一遍,收获真的巨大,顺便还能帮助译者改正一些小错误,也有不小的成就感。(小声:推荐小白学习,真的不要再说什么去阅读源码了,效果真的不大,过几天基本全忘关了。多写多用才能记住,才能更好的掌握编程这门技能,也是最快的学习方式)。
本作品采用《CC 协议》,转载必须注明作者和本文链接
放到 Model 类的boot 方法比较好。