Laravel Observer 觀察者

Laravel Observer 觀察者

laravel提供模型觀察者的功能,讓我們可以監聽模型上的事件,當觸發特定事件時,可以做而外的處理

舉例說明:
假如在新增商家後,要透過google api取得商家資訊,就可以透過Observer方式處理

透過以下指令創建Observer,預設會放在app/Observers/資料夾底下

php artisan make:observer StoreObserver --model=Store

創建完成後檔案如下

<?php

namespace App\Observers;

use App\Models\Store;

class StoreObserver
{
    /**
     * Handle the Store "created" event.
     *
     * @param  \App\Models\Store  $store
     * @return void
     */
    public function created(Store $store)
    {
        //
    }

    /**
     * Handle the Store "updated" event.
     *
     * @param  \App\Models\Store  $store
     * @return void
     */
    public function updated(Store $store)
    {
        //
    }

    /**
     * Handle the Store "deleted" event.
     *
     * @param  \App\Models\Store  $store
     * @return void
     */
    public function deleted(Store $store)
    {
        //
    }

    /**
     * Handle the Store "forceDeleted" event.
     *
     * @param  \App\Models\Store  $store
     * @return void
     */
    public function forceDeleted(Store $store)
    {
        //
    }
}

觀察者編輯

我們要在商家創建時進行處理,所以在created函式裡進行處理

public function created(Store $store)
{
    $store = Store::findOrFail($store->id);
    // ... 抓取api資料以及賦予值
    $store->save();
}

註冊觀察者

再到App\Providers\EventServiceProvider註冊Model Observers

可以在boot方法中註冊

use App\Models\Store;
use App\Observers\StoreObserver;

/**
 * Register any events for your application.
 *
 * @return void
 */
public function boot()
{
    Store::observe(StoreObserver::class);
}

也可以在$observers屬性中列出

use App\Models\Store;
use App\Observers\StoreObserver;

/**
 * The model observers for your application.
 *
 * @var array
 */
protected $observers = [
    Store::class => [StoreObserver::class],
];

Observers各方法對應事件

方法 對應事件
retrieved 檢索模型後
creating 在創建模型之前
created 創建模型後
updating 在模型更新之前
updated 模型更新後
saving 在保存模型之前
saved 模型保存後
deleting 在刪除模型之前
deleted 刪除模型後
restoring 在恢復軟刪除模型之前
restored 軟刪除模型恢復後

Observers觀察者 與event事件 差別

Observers 基本上是只能在 Eloquent 模型處理預定義事件(創建記錄、更新記錄、刪除等)。

event事件是通用的,不是預定義的,可以在任何地方使用,不僅是在模型中。

本作品采用《CC 协议》,转载必须注明作者和本文链接
《L01 基础入门》
我们将带你从零开发一个项目并部署到线上,本课程教授 Web 开发中专业、实用的技能,如 Git 工作流、Laravel Mix 前端工作流等。
《L05 电商实战》
从零开发一个电商项目,功能包括电商后台、商品 & SKU 管理、购物车、订单管理、支付宝支付、微信支付、订单退款流程、优惠券等
讨论数量: 0
(= ̄ω ̄=)··· 暂无内容!

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