Skip to main content

Overview

Unleash Commerce uses observers to provide behavior that should always happen to models. For example, the UserObserver automatically removes roles and permissions when a user is deleted, ensuring data consistency without requiring manual cleanup.

Creating an Observer

Create an observer class and implement the observer contract for your model:
namespace App\Observers;

use Esign\UnleashCommerce\Core\Contracts\Observers\CategoryObserver as CategoryObserverContract;
use Esign\UnleashCommerce\Core\Models\Category;
use Illuminate\Support\Facades\Cache;

class CategoryObserver implements CategoryObserverContract
{
    public function updated(Category $category): void
    {
        // Invalidate category cache when updated
        Cache::forget('categories_tree');
    }

    public function deleted(Category $category): void
    {
        // Invalidate category cache when deleted
        Cache::forget('categories_tree');
    }
}

Replacing an Observer

Replace a default observer with your custom implementation in a service provider:
<?php

namespace App\Providers;

use App\Observers\UserObserver;
use Esign\UnleashCommerce\Core\Contracts\Observers\UserObserver as UserObserverContract;
use Esign\UnleashCommerce\Core\Facades\ObserverManifest;
use Illuminate\Support\ServiceProvider;

class UnleashCommerceServiceProvider extends ServiceProvider
{
    public function boot(): void
    {
        $this->registerObservers();
    }

    protected function registerObservers(): void
    {
        ObserverManifest::replace(
            UserObserverContract::class,
            UserObserver::class
        );
    }
}

Disabling an Observer

Disable an observer entirely without replacing it in a service provider:
<?php

namespace App\Providers;

use Esign\UnleashCommerce\Core\Contracts\Observers\CategoryObserver as CategoryObserverContract;
use Esign\UnleashCommerce\Core\Facades\ObserverManifest;
use Illuminate\Support\ServiceProvider;

class UnleashCommerceServiceProvider extends ServiceProvider
{
    public function boot(): void
    {
        $this->registerObservers();
    }

    protected function registerObservers(): void
    {
        ObserverManifest::disable(CategoryObserverContract::class);
    }
}

Existing Observers

The core package includes the following observers:
ObserverContractPurpose
CategoryObserverCategoryObserverContractHandles category deletion, including nested categories.
UserObserverUserObserverContractManages user deletion by cleaning up associated customer user relationships.