Definovanie nastavení
Každé nastavenie je malá trieda, ktorá dedí od BaseOption. Bez prepísaní je kľúčom názov triedy, hodnota sa pretypuje na string a predvolená hodnota je null:
use RoundlyConsulting\Options\BaseOption;
final class SimpleOption extends BaseOption
{
// Uses all defaults: key 'SimpleOption', cast 'string', default null.
}Prispôsobíte ho prepísaním hookov — key(), default(), castAs(), encrypted(), rules(), authorizeRead() / authorizeWrite() a prezentačných metód label(), help(), section() a order():
use Illuminate\Contracts\Database\Eloquent\CastsAttributes;
use RoundlyConsulting\Options\BaseOption;
final class NotificationPreferences extends BaseOption
{
public function key(): string
{
return 'notification-preferences';
}
public function default(): mixed
{
return collect(['email' => true, 'sms' => false]);
}
public function castAs(): string|CastsAttributes
{
return 'collection';
}
}Príklady v tejto dokumentácii používajú ThemeOption v tejto podobe:
namespace App\Options;
use Illuminate\Contracts\Database\Eloquent\CastsAttributes;
use RoundlyConsulting\Options\BaseOption;
final class ThemeOption extends BaseOption
{
public function key(): string
{
return 'theme';
}
public function default(): mixed
{
return 'light';
}
public function castAs(): string|CastsAttributes
{
return 'string';
}
}Čo môžete prepísať
| Metóda | Predvolené | Účel |
|---|---|---|
key(): string | názov triedy | Kľúč v úložisku — jedinečný pre každé nastavenie. |
default(): mixed | null | Vráti sa, keď pre daný rozsah nie je nič uložené. |
castAs(): string|CastsAttributes | 'string' | Ako sa uložená hodnota pretypuje pri čítaní a zápise. |
encrypted(): bool | false | Šifrovať hodnotu v úložisku. |
rules(): array|string | [] | Validačné pravidlá Laravelu, aplikované pri set(). |
readable(): string | kľúč s veľkými začiatočnými písmenami | Čitateľný názov — z notification-preferences vznikne Notification Preferences. Používa ho options:list. |
label(): string | readable() | Popisok poľa v definícii skupiny. |
help(): ?string | null | Nápoveda pod poľom. |
section(): ?string | null | Sekcia alebo záložka, do ktorej môže UI pole zaradiť. |
order(): int | 0 | Poradie v rámci skupiny (vzostupne). |
authorizeRead(?Authenticatable, ?Model): bool | true | Hook na čítanie, vynucovaný pri zapnutej autorizácii. |
authorizeWrite(?Authenticatable, ?Model): bool | true | Hook na zápis, vynucovaný pri zapnutej autorizácii. |
label(), help(), section() a order() dokumentuje voliteľný kontrakt HasPresentation, authorizeRead() a authorizeWrite() kontrakt AuthorizesOptions. BaseOption obe sady už implementuje, takže kontrakty implementovať nemusíte.
Generovanie nastavení
make:option vytvorí triedu v app/Options. --key a --cast doplnia kľúč a cast, --encrypted zapne šifrovanie a --enum prepne na šablónu s castom cez EnumCast:
php artisan make:option ThemeOption --cast=string --key=theme
php artisan make:option SecretToken --encrypted
php artisan make:option StatusOption --enum="App\Enums\Status"Priame použitie triedy nastavenia
Každé nastavenie funguje aj samostatne — make() pre globálny rozsah, for() pre vlastníka. Ide len o skratku, nie o inú cestu: value(), set(), has(), forget(), reset() a remember() sú final a idú cez ten istý OptionsManager ako fasáda, takže sa správajú rovnako a Options::fake() ich vidí:
ThemeOption::make()->value(); // global value, or default() when unset
ThemeOption::make()->set('dark'); // global write
ThemeOption::for($user)->value(); // owner-scoped read
ThemeOption::for($user)->set('light'); // owner-scoped write
ThemeOption::for($user)->has();
ThemeOption::for($user)->forget();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.