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

Publikovaný config/attributes.php v plnom znení, s príkladmi definícií v komentári:

return [
    'model' => RoundlyConsulting\Attributes\Models\Attribute::class,
    'table' => 'attributes',
    'key_type' => env('ATTRIBUTES_KEY_TYPE', 'bigint'),
    'actor_key_type' => env('ATTRIBUTES_ACTOR_KEY_TYPE', 'bigint'),
    'strict' => env('ATTRIBUTES_STRICT', false),
    'prune_after_days' => env('ATTRIBUTES_PRUNE_AFTER_DAYS', 30),
    'delete_with_owner' => env('ATTRIBUTES_DELETE_WITH_OWNER', true),
    'history' => [
        'enabled' => env('ATTRIBUTES_HISTORY', false),
        'table' => 'attribute_revisions',
        'actor' => [
            'enabled' => env('ATTRIBUTES_HISTORY_ACTOR', false),
            'guard' => env('ATTRIBUTES_HISTORY_ACTOR_GUARD'),
        ],
    ],
    'validation' => [
        'whole_set' => env('ATTRIBUTES_VALIDATE_WHOLE_SET', false),
    ],
    'resources' => [
        'revision_actor' => RoundlyConsulting\Attributes\Http\Resources\RevisionActorResource::class,
    ],
    'unique_scope' => null,
    'definitions' => [
        // 'rating'  => ['type' => 'integer', 'rules' => ['min:1', 'max:5'], 'required' => true],
        // 'sku'     => ['type' => 'string', 'unique' => 'global'],
        // 'code'    => ['type' => 'string', 'unique' => 'scope', 'unique_scope' => 'team_id'],
        // 'token'   => ['type' => 'string', 'encrypted' => true],
        // 'retries' => ['type' => 'integer', 'default' => 3],
    ],
];

Všetky kľúče

KľúčPredvolenéEnvÚčel
modelAttribute::class—Eloquent model, ktorý ukladá atribúty. Musí to byť model Attribute z balíka alebo jeho podtrieda; čokoľvek iné vyhodí výnimku.
tableattributes—Tabuľka, ktorú používa migrácia aj model. Prázdna hodnota sa považuje za nenastavenú a použije sa predvolená; hodnota, ktorá nie je reťazec, vyhodí výnimku.
key_typebigintATTRIBUTES_KEY_TYPETyp kľúča vlastníka v morph stĺpcoch: bigint, uuid alebo ulid (bez ohľadu na veľkosť písmen; iná hodnota pri spustení migrácií vyhodí InvalidConfigurationException). Číta sa pri spustení migrácií.
actor_key_typebigintATTRIBUTES_ACTOR_KEY_TYPETyp kľúča stĺpcov actor v revíziách (migrácia update_attribute_revisions_add_actor): bigint, uuid alebo ulid, nezávisle od key_type — vaši používatelia môžu mať iné kľúče ako modely vlastníkov. Číta sa pri spustení migrácií.
strictfalseATTRIBUTES_STRICTOdmietne zápis hodnoty aj metadát pre názov bez globálnej definície aj bez definície v schéme modelu (UnknownAttributeException).
prune_after_days30ATTRIBUTES_PRUNE_AFTER_DAYSPredvolený vek v dňoch pre attributes:prune. Celé číslo, 0 alebo viac (0 vymaže všetky soft-deleted atribúty); prázdna hodnota (ATTRIBUTES_PRUNE_AFTER_DAYS=) sa považuje za nenastavenú a znamená 30; čokoľvek iné vyhodí výnimku.
delete_with_ownertrueATTRIBUTES_DELETE_WITH_OWNERTrvalé zmazanie vlastníka — modelu bez SoftDeletes alebo cez forceDelete() — odstráni aj jeho riadky atribútov a uvoľní jeho jedinečné hodnoty; soft delete ich ponechá. Revízie zostávajú v oboch prípadoch. Pozrite Odstraňovanie a synchronizácia.
history.enabledfalseATTRIBUTES_HISTORYZaznamenáva revíziu starý→nový pri každom pripojení, zmene hodnoty či metadát a odpojení.
history.tableattribute_revisions—Tabuľka auditnej stopy. Prázdna hodnota sa považuje za nenastavenú a použije sa predvolená; hodnota, ktorá nie je reťazec, vyhodí výnimku.
history.actor.enabledfalseATTRIBUTES_HISTORY_ACTORZaznamená aj to, kto zmenu urobil — vyžaduje migráciu stĺpcov actor. V ďalšej major verzii sa plánuje predvolene zapnúť.
history.actor.guardnullATTRIBUTES_HISTORY_ACTOR_GUARDAuth guard, z ktorého pochádza predvolený autor zmeny; null alebo prázdna hodnota = predvolený guard; hodnota, ktorá nie je reťazec, vyhodí výnimku.
validation.whole_setfalseATTRIBUTES_VALIDATE_WHOLE_SETKaždý zápis hodnoty — set(), setMany(), stage()->save(), sync() — aj validateAttributes() overí celú množinu atribútov vlastníka, takže pravidlá sa môžu odvolávať na iné atribúty. Pozrite Validácia naprieč atribútmi.
resources.revision_actorRevisionActorResource::class—JSON resource, cez ktorý AttributeRevisionResource vykreslí autora revízie. Null alebo prázdna hodnota = predvolený; čokoľvek, čo nie je inštanciovateľný potomok JsonResource, vyhodí InvalidConfigurationException s názvom kľúča.
unique_scopenull—V rámci čoho je jedinečná definícia 'unique' => 'scope', ktorá nemá vlastný unique_scope: názov atribútu alebo relácie na vlastníkovi (team_id, team) alebo class-string triedy ResolvesUniqueScope. Null alebo prázdna hodnota = bez predvolenej hodnoty; hodnota, ktorá nie je reťazec, vyhodí InvalidConfigurationException. Pozrite Jedinečnosť, povinnosť a predvolené hodnoty.
definitions[]—Počiatočné definície registra podľa názvu atribútu; každá položka je pole. Načítajú sa raz pri štarte.

Kľúče definície

Každá položka v definitions má ako kľúč názov atribútu a prijíma tieto kľúče:

Kľúč definícieTypÚčel
typestringstring, integer, float, boolean, array alebo datetime (alebo prípad enumu AttributeType) — hodnota sa podľa neho overí aj uloží („5“ sa pri integer uloží ako 5). Nenastavený alebo prázdny typ znamená string; čokoľvek iné vyhodí výnimku.
rulesarrayĎalšie validačné pravidlá Laravelu, uplatnené po pravidle samotného typu. Musí to byť pole (['min:1', 'max:5']); reťazec s pravidlami oddelenými zvislou čiarou vyhodí výnimku.
requiredboolVynucuje ho $model->validateAttributes(). Číta sa rovnako ako logické hodnoty v env; čokoľvek iné vyhodí výnimku.
defaultmixedVracajú ho čítania, keď atribút nie je pripojený. Nikdy sa neukladá.
uniquestring / boolowner alebo true (v rámci typu vlastníka), scope (v rámci typu vlastníka v jeho tíme či tenante), global (naprieč všetkými vlastníkmi), none alebo false (nenastavená alebo prázdna hodnota tiež znamená none); čokoľvek iné vyhodí výnimku namiesto vypnutia jedinečnosti. Stojí na unikátnom indexe v databáze — aj pre šifrované hodnoty.
unique_scopestring / ClosureLen pri 'unique' => 'scope' — názov atribútu alebo relácie na vlastníkovi (team_id, team), class-string triedy ResolvesUniqueScope alebo closure v metóde attributeDefinitions() modelu. Ak nie je nastavený, platí nastavenie unique_scope. Pri inej hodnote unique alebo ako prázdna hodnota vyhodí výnimku.
encryptedboolUloží hodnotu ako šifrový text cez Crypt. Číta sa rovnako ako logické hodnoty v env; čokoľvek iné vyhodí výnimku.
// config/attributes.php
'definitions' => [
    'rating'  => ['type' => 'integer', 'rules' => ['min:1', 'max:5'], 'required' => true],
    'sku'     => ['type' => 'string', 'unique' => 'global'],
    'token'   => ['type' => 'string', 'encrypted' => true],
    'retries' => ['type' => 'integer', 'default' => 3],
],

Definície z konfigurácie sa do registra načítajú raz, pri štarte aplikácie; neplatná položka pri štarte vyhodí InvalidConfigurationException s cestou attributes.definitions.<name>.<key>. Definície môžete registrovať aj v kóde alebo ich deklarovať pre konkrétny model — pozrite Definície a validácia a Schémy modelov.

Prostredie (env)

Kľúče, ktoré sa líšia podľa nasadenia, sa čítajú z env:

# bigint | uuid | ulid — set before you run the migrations
ATTRIBUTES_KEY_TYPE=bigint

# reject attribute names that are not registered
ATTRIBUTES_STRICT=false

# default age (days) for attributes:prune
ATTRIBUTES_PRUNE_AFTER_DAYS=30

# remove an owner's attributes when the owner is deleted for good
ATTRIBUTES_DELETE_WITH_OWNER=true

# record an old -> new revision on every change
ATTRIBUTES_HISTORY=false

# also record who made each change (needs the actor migration)
ATTRIBUTES_HISTORY_ACTOR=false

# guard the default actor comes from — empty means the default guard
ATTRIBUTES_HISTORY_ACTOR_GUARD=

# key type of the revisions' actor columns — set before you migrate
ATTRIBUTES_ACTOR_KEY_TYPE=bigint

# validate the owner's whole attribute set on every value write
ATTRIBUTES_VALIDATE_WHOLE_SET=false

Logické hodnoty v env prijímajú true/false, 1/0, on/off aj yes/no. Prísny režim, história, autor zmeny aj validácia celej množiny sa čítajú pri každom volaní, takže zmena platí bez reštartu. Každé nastavenie sa číta prísne: nenastavený kľúč — chýbajúci, null alebo prázdny (KEY= v .env) — použije predvolenú hodnotu a akákoľvek iná neplatná hodnota vyhodí InvalidConfigurationException s názvom kľúča — nikdy sa potichu nenahradí.

Výsledné hodnoty kedykoľvek overíte príkazom about v Laraveli. Definície sa vypisujú len ako počet, nikdy podľa názvu — názov atribútu často pomenúva práve to tajomstvo, ktoré chráni príznak encrypted:

php artisan about --only=attributes

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.