3 jednoduché způsoby použití událostí modelu Eloquent v Laravelu

Eloquent ORM společnosti Laravel je výkonný nástroj pro interakci s databázemi. Jednou z jeho význačných funkcí je modelové události, které umožňují reagovat na konkrétní akce pro...

Světlý režim slouží jen pro ukázku funkcionality. Proto používejte tmavou verzi webu.

09. 01. 2025

3 jednoduché způsoby použití událostí modelu Eloquent v Laravelu

Eloquent ORM společnosti Laravel je výkonný nástroj pro interakci s databázemi. Jednou z jeho význačných funkcí je modelové události, které umožňují reagovat na konkrétní akce prováděné na modelech. V tomto příspěvku na blogu se seznámíme s tím, co jsou události modelů Eloquent, jak je používat a s praktickými případy použití - to vše jednoduchým jazykem, který je vhodný pro začátečníky.

Co jsou události modelu Eloquent v Laravelu?

Události modelu Eloquent umožňují spustit kód, když se s modely provedou určité akce. Můžete například spustit specifickou logiku, když:

  • Záznam je vytvořen nebo aktualizován.
  • Záznam je odstraněn nebo obnoven.
  • Záznam je načten z databáze.

Tyto události pomáhají automatizovat úlohy, jako je protokolování, ověřování dat, odesílání oznámení a další. Představte si je jako háčky, které můžete použít k propojení dalších funkcí s životním cyklem záznamů v databázi.

Dostupné události Eloquent Model

Laravel poskytuje události pro různé fáze životního cyklu modelu:

  • vyhledáno na adrese: Spouští se při načtení záznamu z databáze.
  • vytvoření: Spouští se před vložením nového záznamu do databáze.
  • vytvořeno: Spouští se po vložení nového záznamu.
  • aktualizace: Spouští se před aktualizací existujícího záznamu.
  • aktualizováno: Spouští se po aktualizaci existujícího záznamu.
  • ukládání: Spouští se před uložením záznamu (platí pro vytváření i aktualizaci).
  • uloženo: Spouští se po uložení záznamu (platí pro vytváření i aktualizaci).
  • mazání: Spouští se před smazáním záznamu.
  • smazáno: Spouští se po smazání záznamu.
  • obnovení: Spouští se před obnovením soft-deleted záznamu.
  • restaurováno: Spouští se po obnovení soft-deleted záznamu.

Tyto události vám dávají plnou kontrolu nad chováním modelu v každé fázi jeho životního cyklu.

Jak používat události modelu Eloquent

Existují tři hlavní způsoby zpracování událostí modelu Eloquent: pomocí příkazu $dispatchesEvents vlastnosti, uzávěry a pozorovatele.

1. Použití $dispatchesEvents Majetek

Laravel umožňuje mapovat události modelu na vlastní třídy událostí pomocí příkazu $dispatchesEvents ve vašem modelu. Tento přístup je výhodný, pokud chcete zapouzdřit logiku obsluhy událostí do samostatných tříd, což přispívá k čistšímu a lépe udržovatelnému kódu. Je důležité si uvědomit, že pro zde mapované události byste měli definovat posluchači událostí pro zpracování odesílaných událostí.

Zde je návod, jak ji definovat:

use App\Events\UserCreated;
use Illuminate\Database\Eloquent\Model;
 
class User extends Model
{
protected $dispatchesEvents = [
'created' => UserCreated::class,
];
}

V tomto příkladu:

  • Když se objeví nový User je vytvořen model UserCreated je událost odeslána automaticky. Měli byste také vytvořit posluchače události pro UserCreated zpracovávat logiku spojenou s touto událostí.

2. Používání uzávěrů

Pro přímočarou obsluhu událostí můžete definovat uzávěry přímo v modelu. booted metoda. Tato metoda je ideální pro jednoduchou logiku, která nevyžaduje samostatnou třídu událostí.

Příklad:

use Illuminate\Database\Eloquent\Model;
 
class User extends Model
{
protected static function booted()
{
static::created(function ($user) {
// Logic to execute after a user is created
});
}
}

V tomto nastavení:

  • Uzavření v rámci static::created se provede ihned po vytvoření nového uživatele.

3. Použití pozorovatelů

Pozorovatelé umožňují seskupit veškerou logiku zpracování událostí do jediné třídy, což zlepšuje organizaci, zejména pokud se jedná o více událostí nebo modelů.

  • Definice pozorovatele

Pozorovatele můžete vytvořit pomocí příkazu Artisan:

php artisan make:observer UserObserver --model=User

Tento příkaz generuje UserObserver třída:

namespace App\Observers;
 
use App\Models\User;
 
class UserObserver
{
public function creating(User $user)
{
$user->username = strtolower($user->username);
}
 
public function updating(User $user)
{
if ($user->isDirty('email')) {
// Handle email changes
}
}
}
  • Registrace pozorovatelů

Existují dva základní způsoby registrace pozorovatelů:

a. Na adrese AppServiceProvider:

V rámci boot metoda vašeho AppServiceProvider, můžete pozorovatele zaregistrovat:

use App\Models\User;
use App\Observers\UserObserver;
 
public function boot()
{
User::observe(UserObserver::class);
}

b. Jako atribut PHP:

Případně můžete pomocí atributů PHP registrovat pozorovatele přímo v modelu:

use App\Observers\UserObserver;
use Illuminate\Database\Eloquent\Attributes\ObservedBy;
 
#[ObservedBy(UserObserver::class)]
class User extends Model
{
// Model logic
}

Tato metoda nabízí stručný způsob přiřazování pozorovatelů k modelům.

Praktické případy použití modelových událostí

Zde je několik scénářů, ve kterých modelové události Eloquent vynikají:

  1. Zaznamenávání změn

    • Sledování změn důležitých polí, jako jsou uživatelské role nebo stavy účtů.
  2. Odesílání oznámení

    • Upozorňovat uživatele na aktualizaci jejich profilu nebo změnu stavu objednávky.
  3. Zachování integrity dat

    • Automatické odstranění souvisejících záznamů při odstranění nadřazeného záznamu.
  4. Prosazování obchodních pravidel

    • Zabránit určitým akcím, jako je odstraňování účtů správce.

Osvědčené postupy pro používání modelových událostí

  1. Zachovejte jednoduchou logiku: Vyhněte se vkládání složité logiky do posluchačů událostí. Místo toho delegujte úlohy na třídy služeb nebo úlohy.
  2. Důkladné testování: Zajistěte, aby posluchači událostí fungovali správně a nezpůsobovali chyby.
  3. Dbejte na výkon: Dlouho běžící úlohy v posluchačích událostí mohou zpomalit aplikaci. Pro takové úlohy použijte systém fronty Laravel.

Závěr

Události modelu Eloquent představují výkonný způsob, jak se připojit k životnímu cyklu modelů a provádět vlastní logiku. Ať už zaznamenáváte změny, posíláte oznámení nebo vynucujete pravidla, události modelu dělají vaši aplikaci chytřejší a efektivnější. Pomocí $dispatchesEvents, uzávěry nebo pozorovatele, můžete implementovat zpracování událostí způsobem, který nejlépe vyhovuje potřebám vaší aplikace. Vyzkoušejte přidání událostí modelu do svého projektu Laravel ještě dnes a uvidíte, jak vám zjednoduší práci!

Původní článek publikoval Nabil Hassen.

Mohlo by vám pomoct

Praktické věci kolem webu

Než se pustíte do webu, hodí se mít jasno v podkladech, WordPressu, cookies a měření.

Google reference

Co říkají klienti

Ukázky skutečných recenzí, které klienti zanechali na mém Google profilu.

Přejít na recenze
★ ★ ★ ★ ★

„Člověk, který své práci a rozumí a ví co dělá. Velmi rychlá komunikace a profesionální přístup. Doporučuji.“

Jaroslav Kupča
Google
★ ★ ★ ★ ★

„Skvělá spolupráce, při dalších projektech určitě nebudu shánět někoho jiného.“

Roman Koňařík
Google
★ ★ ★ ★ ★

„S panem Vančurou jsem spolupracovala na tvorbě mých webových stránek a jsem maximálně spokojená. Oceňuji profesionální přístup, rychlou komunikaci a schopnost přesně pochopit moje představy. Web je moderní, přehledný, funkční a skvěle vypadá i na mobilu. Celý proces proběhl hladce, s jasným vysvětlením jednotlivých kroků a výborným výsledkem. Určitě doporučuji každému, kdo hledá spolehlivý a kvalitní přístup.“

Barbora Zemánková
Google
★ ★ ★ ★ ★

„Spolupráce při tvorbě konfigurátoru proběhla naprosto bez problémů. Oceňuji profesionální přístup, rychlou komunikaci a schopnost pochopit specifický projekt od A do Z. Konfigurátor je přehledný, funkční a přesně odpovídá mým požadavkům. Rozhodně doporučuji.“

mareksevcik_FPV
Google
★ ★ ★ ★ ★

„Velmi dobrá a rychlá spolupráce. Doporučuji!“

Leoš Kaucký
Google
★ ★ ★ ★ ★

„Přesně takto si představujeme profesionální práci. Dekujeme“

STAVILLI
Google
★ ★ ★ ★ ★

„Ať už se jedná o optimalizaci webu, nebo tvorbu na míru oceňuji kromě profesionální práce a znalostí problematiky také férový přístup a komunikaci.“

Aleš Illický
Google
★ ★ ★ ★ ★

„Děkuji za profesionální spolupráci, vše dle domluvy, naprostá spokojenost a mohu jen vřele doporučit.... Při dalších projektech určitě opět využiji Vašich služeb“

Peter Spilak
Google
★ ★ ★ ★ ★

„Profesionalita a velká ochota, nemohu jinak než doporučit“

Magdalena Vašková
Google
★ ★ ★ ★ ★

„Skvělá zkušenost při tvorbě webu, profesionální přístup, rychlost, ochota pomoci“

Jana Kono
Google
★ ★ ★ ★ ★

„Rychlá spolupráce a komunikace – mohu jen doporučit.“

Gawix
Google
★ ★ ★ ★ ★

„Moc mi pomohl, když jsem potřebovala pomoc s webem. A bylo to gratis :)). Jsem mu neskonale vděčná.“

Radka Arbesová
Google
★ ★ ★ ★ ★

„Děkuji Jiřímu za rychlou a kvalitní spolupráci na tvorbě webu. Srozumitelná a ochotná komunikace mě vždycky potěší a přináší důvěru.“

Jiří Mařík
Google
★ ★ ★ ★ ★

„Jsem maximálně spokojená. Rychlost, ochota a cenově dostupné. Děkuji“

Veronika Černá
Google
★ ★ ★ ★ ★

„Naprostá spokojenost. Rychlá komunikace, skvělá cena a odborná pomoc. Moc děkuji :)“

Patricie Kučerová
Google
★ ★ ★ ★ ★

„Velká spokojenost, rychlost a p. Vančura moc dobře ví co dělá. :)“

Ondřej Daniško
Google
★ ★ ★ ★ ★

„dobrá práce, rychlá odezva“

Zuzana Jírová
Google
★ ★ ★ ★ ★

„S programátory mám zkušeností hodně, ale tady musím opravdu pochválit. Pro mě a mé přátele vytvořil skvělý nástroj na evidenci sbírek a opravdu se to povedlo. Bylo to hotové rychle, kvalitně a za skvělou cenu. Komunikace funguje velmi rychle, což je super a ne úplně standard. Díky za super práci, za mě 100% spokojenost!“

Zdeněk
Google
★ ★ ★ ★ ★

„Vše bylo rychlé a hlavně to funguje. Dobrá práce.“

Lukáš Bartášek
Google
★ ★ ★ ★ ★

„Normálně recenze nepíši, ale zde rád doporučím kvalitní práci. Jiří pro mě vytvořil web pro dětské tábory. Kvalitní práce, rychlá komunikace a vlastní nápady, které Jiří sám přidá, jsou na velice vysoké úrovni. Nemohu hodnotit jinak než 5/5.“

Tomáš Loněk
Google
★ ★ ★ ★ ★

„Pan Jiri nam delal jiz 3 webove stranky a vzdy velka spokojenost, je mega rychly a vse hned kladne vyridi, mohu pouze doporucit. Poradi si bez problemu i s rezervacnimi kalendaremi, udrzbou socialnich siti, atd.“

Barbara Mašková
Google