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

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ódaPredvolenéÚčel
key(): stringnázov triedyKľúč v úložisku — jedinečný pre každé nastavenie.
default(): mixednullVrá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(): boolfalseŠifrovať hodnotu v úložisku.
rules(): array|string[]Validačné pravidlá Laravelu, aplikované pri set().
readable(): stringkľúč 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(): stringreadable()Popisok poľa v definícii skupiny.
help(): ?stringnullNápoveda pod poľom.
section(): ?stringnullSekcia alebo záložka, do ktorej môže UI pole zaradiť.
order(): int0Poradie v rámci skupiny (vzostupne).
authorizeRead(?Authenticatable, ?Model): booltrueHook na čítanie, vynucovaný pri zapnutej autorizácii.
authorizeWrite(?Authenticatable, ?Model): booltrueHook 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 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.