Observery
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 allInvokable 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ť | Typ | Význam |
|---|---|---|
key | string | key() daného nastavenia. |
optionClass | class-string | Trieda nastavenia, ktoré sa zmenilo. |
type | OptionChangeType | OptionChangeType::Set alebo OptionChangeType::Forgotten. |
value | mixed | Nová hodnota po caste — tá istá, ktorú vráti get(). Pri zabudnutom nastavení null. |
owner | ?Model | Rozsah, 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 kryptomienOdoslaní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.