laravel 观察者模式


第一步  创建观察者文件

php artisan make:observer TopicObserver

第二步  将观察者文件和模型绑定,(这里我就不创建模型了)

\app\Providers\AppServiceProvider.php

<?php

namespace App\Providers;

use Carbon\Carbon;
use Illuminate\Support\ServiceProvider;

class AppServiceProvider extends ServiceProvider
{
    /**
     * 启动自运行
     */
    public function boot()
   {
        \App\Models\Topic::observe(\App\Observers\TopicObserver::class);             #绑定观察文件
    }
.
.
.

第三步  编辑观察者文件

\app\Observers\TopicObserver.php

<?php

namespace App\Observers;

use App\Models\Topic;
use App\Jobs\TranslateSlug;

/**
 * Class TopicObserver
 * @package App\Observers
 * creating, created, updating, updated, saving,
 * saved,  deleting, deleted, restoring, restored
 */
class TopicObserver
{
    /**
     * 模型观察器在 Topic 模型保存时触发的 saving 事件中,对 excerpt 字段进行赋值:
     * 这里还没有创建成功,
     * @param Topic $topic
     */
    public function saving(Topic $topic)
    {
        $topic->body    = clean($topic->body, 'user_topic_body');                   #防止xss攻击
    }
}

扩展介绍:

retrieved,            #获取到模型实例后触发
creating,             #创建过程前                                * 常用
created,              #创建成功后                                * 常用
updating,             #更新过程前                                * 常用
updated,              #更新成功后                                * 常用
saving,               #代表这两个方法的集合creating,updating       * 常用
saved,                #代表这两个方法的集合created,updated         * 常用
deleting,             #删除过程前                                * 常用
deleted,              #删除过程后                                * 常用
restoring,            #恢复软删除记录前触发
restored,             #恢复软删除记录后触发

总结:

  1. 创建观察者文件,
  2. 在`AppServiceProvider.php`文件中,将模型文件和观察者文件绑定
  3. 编辑创建好的观察者文件

作者介绍

Image Description

zfajax舫

小时候的梦想是当宇航员,长大的梦想是在北京买套90㎡房的小站长、自媒体人,2014年毕业,后从事过网站开发搭建工作;2016年,创建了张舫博客;20015-至今在北京工作(微信:a7983310)

评论列表

还没有人评论,抢占前排沙发

发表评论

关于作者

Image Description

zfajax舫

小时候的梦想是当宇航员,长大的梦想是在北京买套90㎡房的小站长、自媒体人,2014年毕业,后从事过网站开发搭建工作;2016年,创建了张舫博客;20015-至今在北京工作(微信:a7983310)

关注作者

Social Links

定制项目外包

Unit 25 Suite 3, 925 Prospect PI,
Beach Resort, 23001

手机号码

18600004319