DI a akcie
Fasáda je odporúčaná voľba, nie povinnosť. Máte tri rovnocenné vstupné body:
- Fasáda Options — najkratší zápis, vhodný pre väčšinu kódu.
- Manager RoundlyConsulting\Options\OptionsManager vložený cez konštruktor — je koreňom fasády, preto má presne to isté API, len ako explicitnú závislosť bez statických volaní.
- Akcie — jednoúčelové triedy s jedinou metódou execute(), ktoré skladáte do vlastných akcií, jobov a príkazov. Options má dve: ExportOptionsAction a ImportOptionsAction.
Vloženie managera
use RoundlyConsulting\Options\OptionsManager;
final class CopyTeamSettings
{
public function __construct(private OptionsManager $options) {}
public function __invoke(Team $from): string
{
return $this->options->exportJson($from);
}
}
// The same API as the facade, handles included:
$this->options->for($team)->set(ThemeOption::class, 'dark');Options::fake() vymení väzbu v kontajneri, takže OptionsManager získaný po tomto volaní je tiež fake.
Volanie akcie
use RoundlyConsulting\Options\Actions\ExportOptionsAction;
use RoundlyConsulting\Options\Actions\ImportOptionsAction;
// The raw actions — one execute() each:
$payloads = app(ExportOptionsAction::class)->execute($team, globalOnly: false); // list<OptionPayload>
$count = app(ImportOptionsAction::class)->execute($payloads); // intMetóda fasády → akcia
| Metóda fasády | Akcia | execute() |
|---|---|---|
Options::export() | ExportOptionsAction | execute(?Model $owner = null, bool $globalOnly = false): list<OptionPayload> |
Options::exportJson() | — (zakóduje export()) | — |
Options::import() | ImportOptionsAction | execute(list<OptionPayload> $payloads): int |
Všetky ostatné metódy — get(), set(), handly, skupiny, observery či prepojenie s konfiguráciou — sú priamo na manageri; samostatnú akciu nemajú. Metóda managera resolveOptionInstance() je @internal (resolver pre prepojenie s konfiguráciou), preto na nej nestavajte.
DTO OptionPayload
Obe akcie pracujú s RoundlyConsulting\Options\DataTransferObjects\OptionPayload — jedným uloženým riadkom. Payloady si môžete zostaviť sami alebo ich získať z riadkov či JSON:
use RoundlyConsulting\Options\DataTransferObjects\OptionPayload;
$payload = new OptionPayload('theme', 'dark', ownerType: User::class, ownerId: 5);
OptionPayload::fromArray(['key' => 'theme', 'value' => 'dark']); // global row
OptionPayload::list($rows); // rows or payloads → list<OptionPayload>
OptionPayload::listFromJson($json); // a JSON export → list<OptionPayload>
$payload->toArray(); // ['key' => 'theme', 'value' => 'dark', 'owner_type' => User::class, 'owner_id' => 5]owner_id sa riadi podľa options.key_type — pri vlastníkoch s bigint je to int, pri UUID či ULID reťazec. fromArray() prevedie reťazce číslic na int a riadok, ktorý má len owner_type alebo len owner_id, považuje za globálny.
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.