NovinkaZverejnili sme 50+ Laravel balíkov ako open source
Custom AI apps, agents and automation — Roundly ConsultingRoundly
Všetky balíky
Enums for Laravel

Podmienené callbacky

Metódy whenIs* spustia callback, len ak je podmienka splnená, inak voliteľný predvolený callback. Každá vráti ten istý prípad, takže volania sa dajú reťaziť:

NewsCategory::HotNews
    ->whenIs(NewsCategory::HotNews, fn ($enum) => activate($enum))
    ->whenIsNot(NewsCategory::PrivateNews, fn ($enum) => publish($enum));

NewsCategory::HotNews->whenIsIn(
    [NewsCategory::HotNews, NewsCategory::RegularNews],
    fn ($enum) => notifySubscribers($enum),
    fn ($enum) => archive($enum), // runs when the condition is false
);

NewsCategory::HotNews->whenIsNotIn(
    [NewsCategory::PrivateNews],
    fn ($enum) => index($enum),
);

Signatúry

whenIs(self $enum, Closure $callback, ?Closure $default = null): self
whenIsNot(self $enum, Closure $callback, ?Closure $default = null): self
whenIsIn(array $enums, Closure $callback, ?Closure $default = null): self
whenIsNotIn(array $enums, Closure $callback, ?Closure $default = null): self
  • Callback dostane prípad enumu; jeho návratová hodnota sa ignoruje.
  • Voliteľný $default sa spustí, len keď podmienka nie je splnená; bez neho sa pri nezhode nestane nič.
  • Callbacky sú typované ako Closure — arrow funkcie, closures alebo first-class callables ako $this->notify(...).
  • Každá metóda vráti samotný prípad, takže reťazenie nikdy nezmení hodnotu, s ktorou ste začali.

V službe

Vďaka first-class callables zostane logika jednotlivých vetiev v pomenovaných metódach:

use App\Enums\NewsCategory;
use App\Models\Article;

final class ArticlePublisher
{
    public function handle(Article $article): void
    {
        $article->category
            ->whenIs(NewsCategory::HotNews, $this->pin(...))
            ->whenIsNotIn(
                [NewsCategory::PrivateNews],
                $this->announce(...),
                $this->keepInternal(...),
            );
    }

    private function pin(NewsCategory $category): void { /* ... */ }

    private function announce(NewsCategory $category): void { /* ... */ }

    private function keepInternal(NewsCategory $category): void { /* ... */ }
}

Prejavte lásku k open source

Tento balík je zadarmo pod licenciou MIT. Ak vám šetrí čas, jednorazový príspevok alebo členstvo na Patreone nám pomôže ho ďalej udržiavať, testovať a dokumentovať.

Ďalšie spôsoby podpory vrátane kryptomien

Odoslaním daru súhlasíte s našimi podmienkami prijímania darov.

Chcete to zabudovať do svojho produktu?

Naše balíky integrujeme do zákazkových Laravel a AI riešení. Napíšte nám, na čom pracujete, a ozveme sa do 48 hodín.