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

Fasáda je odporúčaná voľba, nie povinnosť. Máte tri rovnocenné vstupné body a všetky spúšťajú ten istý kód:

  • Fasáda Attributes — najkratší zápis, vhodný pre väčšinu kódu.
  • Manager RoundlyConsulting\Attributes\AttributesManager vložený cez konštruktor — je koreňom fasády, singletonom v kontajneri s presne rovnakým API, len ako explicitná závislosť bez statických volaní.
  • Akcie — jednoúčelové final readonly triedy s jedinou metódou execute(), ktoré skladáte do vlastných akcií, jobov a príkazov.

Vloženie managera

use RoundlyConsulting\Attributes\AttributesManager;

final class ImportColor
{
    public function __construct(private AttributesManager $attributes) {}

    public function __invoke(Product $product, string $color): void
    {
        $this->attributes->for($product)->set('color', $color);
    }
}

Attributes::fake() vymení okrem fasády aj väzbu v kontajneri, takže sa zaznamená aj vložený AttributesManager.

Volanie akcie

use RoundlyConsulting\Attributes\Actions\AttachAttributeAction;
use RoundlyConsulting\Attributes\Actions\SyncAttributesAction;
use RoundlyConsulting\Attributes\DataTransferObjects\AttributeData;

// The raw actions — one execute() each
app(AttachAttributeAction::class)->execute($product, new AttributeData('color', 'red'));

$attributes = app(SyncAttributesAction::class)->execute($product, [
    new AttributeData('color', 'red', collect(['hex' => '#f00'])),
    new AttributeData('size', 'L'),
]);                                                     // Collection<int, Attribute>

Akcie prijímajú DTO z RoundlyConsulting\Attributes\DataTransferObjects: AttributeData(name, value = null, ?Collection meta = null) pre hodnotu a AttributeDefinitionData pre definíciu. Priamo volaná akcia obchádza manager, preto ju fake nezaznamená.

Metóda fasády → akcia

Cesta cez fasáduAkciaexecute()
for($o)->set()AttachAttributeAction(Model $owner, AttributeData $data): Attribute
for($o)->setMany(), for($o)->stage()->save()AttachAttributesAction(Model $owner, AttributeData ...$data): Collection<int, Attribute>
for($o)->sync(), for($o)->stage()->sync()SyncAttributesAction(Model $owner, list<AttributeData> $data, bool $forceDelete = false): Collection<int, Attribute>
for($o)->forget()DetachAttributesAction(Model $owner, list<string> $names, bool $forceDelete = false): int
for($o)->forgetExcept()DetachAttributesExceptAction(Model $owner, list<string> $keep, bool $forceDelete = false): list<string>
for($o)->meta()SyncAttributeMetaAction(Model $owner, string $name, ?Collection $meta): Attribute
prune()PruneAttributesAction(?int $days = null): int

WriteAttributeAction (samotný upsert za každým pripojením, synchronizáciou a zápisom metadát) a RecordAttributeRevisionAction sú @internal — volajú ich akcie vyššie, preto ich sami nevolajte. Akcie na pripojenie, synchronizáciu a metadáta overujú pred zápisom a každá zapisovacia akcia beží v jednej transakcii — v savepointe, ak už transakcia beží. Metódy pre definície a validáciu akciu nemajú; sú v AttributeRegistry.

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.