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

Observery reagujú na zmenu jedného konkrétneho nastavenia — bez globálneho listenera, ktorý filtruje podľa kľúča. Registrujte ich v metóde boot() service providera:

use Illuminate\Database\Eloquent\Model;
use Illuminate\Support\Facades\Cache;
use RoundlyConsulting\Options\DataTransferObjects\OptionChange;
use RoundlyConsulting\Options\Enums\OptionChangeType;
use RoundlyConsulting\Options\Facades\Options;

Options::observe(ThemeOption::class, function (mixed $value, ?Model $owner, OptionChange $change): void {
    // $change->type is OptionChangeType::Set or ::Forgotten
    Cache::forget('compiled-theme');
});

// Invokable class-string (resolved from the container), registered by key:
Options::observe('theme', RecompileThemeListener::class);

Options::forgetObservers(ThemeOption::class); // drop one option’s observers
Options::flushObservers();                    // drop them all

Invokable observery

Observer zadaný ako class-string sa pri každej zmene vytvorí z kontajnera, takže funguje constructor injection:

use Illuminate\Database\Eloquent\Model;
use RoundlyConsulting\Options\DataTransferObjects\OptionChange;

final class RecompileThemeListener
{
    public function __construct(private ThemeCompiler $compiler) {}

    public function __invoke(mixed $value, ?Model $owner, OptionChange $change): void
    {
        $this->compiler->compileFor($owner);
    }
}

Class-string bez __invoke vyhodí pri registrácii InvalidOptionObserver.

Údaje o zmene

Každý observer dostane (mixed $value, ?Model $owner, OptionChange $change):

VlastnosťTypVýznam
keystringkey() daného nastavenia.
optionClassclass-stringTrieda nastavenia, ktoré sa zmenilo.
typeOptionChangeTypeOptionChangeType::Set alebo OptionChangeType::Forgotten.
valuemixedNová hodnota po caste — tá istá, ktorú vráti get(). Pri zabudnutom nastavení null.
owner?ModelRozsah, ktorý sa zmenil — pre globálny rozsah null.

Pravidlá

  • Observery sa spúšťajú pri set() a forget() v poradí registrácie — nikdy pri čítaní.
  • Registrácia cez class-string aj cez kľúč z registra cieli na to isté nastavenie.
  • Stavajú na OptionSet a OptionForgotten, preto potrebujú options.events.enabled — výnimkou je Options::fake(), ktorý ich spúšťa priamo.

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.