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 协议》,转载必须注明作者和本文链接
不积跬步无以至千里
《L01 基础入门》
我们将带你从零开发一个项目并部署到线上,本课程教授 Web 开发中专业、实用的技能,如 Git 工作流、Laravel Mix 前端工作流等。
《L04 微信小程序从零到发布》
从小程序个人账户申请开始,带你一步步进行开发一个微信小程序,直到提交微信控制台上线发布。
讨论数量: 1

放到 Model 类的boot 方法比较好。

5年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!