Skip to content
Phillip Dornauer edited this page Apr 19, 2026 · 1 revision

Laravel Events

Marble fires standard Laravel events at key lifecycle points. Listen to them in any ServiceProvider or EventServiceProvider to extend behaviour without modifying core.

use Illuminate\Support\Facades\Event;
// or in EventServiceProvider $listen array

Item Events

Marble\Admin\Events\ItemSaved

Fired after an item's field values are saved via the admin panel.

use Marble\Admin\Events\ItemSaved;

Event::listen(ItemSaved::class, function (ItemSaved $e) {
    $e->item;           // Marble\Admin\Models\Item
    $e->changedFields;  // ['slug.en' => ['old' => '...', 'new' => '...'], ...]
    $e->userId;         // int|null — admin user who saved
});

$changedFields is a flat array keyed by field_name.locale (or just field_name for non-translatable fields). Each entry has old and new keys.


Marble\Admin\Events\ItemPublished

Fired when an item's status is set to published (via the toggle or workflow advance).

use Marble\Admin\Events\ItemPublished;

Event::listen(ItemPublished::class, function (ItemPublished $e) {
    $e->item;    // Item
    $e->userId;  // int|null
});

Marble\Admin\Events\ItemTrashed

Fired after an item is soft-deleted (moved to trash).

use Marble\Admin\Events\ItemTrashed;

Event::listen(ItemTrashed::class, function (ItemTrashed $e) {
    $e->item;    // Item (soft-deleted, still accessible)
    $e->userId;  // int|null
});

Marble\Admin\Events\MarbleFormSubmitted

Fired when a contact form is submitted via <x-marble::marble-form>.

use Marble\Admin\Events\MarbleFormSubmitted;

Event::listen(MarbleFormSubmitted::class, function (MarbleFormSubmitted $e) {
    $e->submission; // FormSubmission model
});

Portal User Events

Marble\Admin\Events\PortalUserRegistered

Fired after a portal user successfully registers at /portal/register.

use Marble\Admin\Events\PortalUserRegistered;

Event::listen(PortalUserRegistered::class, function (PortalUserRegistered $e) {
    $e->user; // Marble\Admin\Models\PortalUser
});

Marble\Admin\Events\PortalUserLoggedIn

Fired after a portal user successfully logs in at /portal/login.

use Marble\Admin\Events\PortalUserLoggedIn;

Event::listen(PortalUserLoggedIn::class, function (PortalUserLoggedIn $e) {
    $e->user; // Marble\Admin\Models\PortalUser
});

Example: Sync to external system on publish

// In AppServiceProvider::boot()
use Marble\Admin\Events\ItemPublished;

Event::listen(ItemPublished::class, function (ItemPublished $e) {
    if ($e->item->blueprint->identifier === 'blog_post') {
        dispatch(new SyncPostToSearchIndex($e->item->id));
    }
});

Example: Send welcome email on portal registration

use Marble\Admin\Events\PortalUserRegistered;
use App\Mail\WelcomeMail;

Event::listen(PortalUserRegistered::class, function (PortalUserRegistered $e) {
    Mail::to($e->user->email)->send(new WelcomeMail($e->user));
});

Clone this wiki locally