Konfigurácia
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 |
|---|---|---|---|
model | Attribute::class | — | Eloquent model, ktorý ukladá atribúty. Musí to byť model Attribute z balíka alebo jeho podtrieda; čokoľvek iné vyhodí výnimku. |
table | attributes | — | 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_type | bigint | ATTRIBUTES_KEY_TYPE | Typ 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_type | bigint | ATTRIBUTES_ACTOR_KEY_TYPE | Typ 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í. |
strict | false | ATTRIBUTES_STRICT | Odmietne 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_days | 30 | ATTRIBUTES_PRUNE_AFTER_DAYS | Predvolený 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_owner | true | ATTRIBUTES_DELETE_WITH_OWNER | Trvalé 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.enabled | false | ATTRIBUTES_HISTORY | Zaznamenáva revíziu starý→nový pri každom pripojení, zmene hodnoty či metadát a odpojení. |
history.table | attribute_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.enabled | false | ATTRIBUTES_HISTORY_ACTOR | Zaznamená aj to, kto zmenu urobil — vyžaduje migráciu stĺpcov actor. V ďalšej major verzii sa plánuje predvolene zapnúť. |
history.actor.guard | null | ATTRIBUTES_HISTORY_ACTOR_GUARD | Auth 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_set | false | ATTRIBUTES_VALIDATE_WHOLE_SET | Kaž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_actor | RevisionActorResource::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_scope | null | — | 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ície | Typ | Účel |
|---|---|---|
type | string | string, 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. |
rules | array | Ď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. |
required | bool | Vynucuje ho $model->validateAttributes(). Číta sa rovnako ako logické hodnoty v env; čokoľvek iné vyhodí výnimku. |
default | mixed | Vracajú ho čítania, keď atribút nie je pripojený. Nikdy sa neukladá. |
unique | string / bool | owner 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_scope | string / Closure | Len 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. |
encrypted | bool | Uloží 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=falseLogické 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=attributesPrejavte 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.