---
title: "Definície a validácia — Attributes for Laravel | Roundly"
description: "Registrujte známe atribúty s typom a validačnými pravidlami Laravelu, načítajte ich z konfigurácie a zapnite prísny režim."
url: https://roundly-consulting.com/sk/open-source/navody/attributes-for-laravel/definicie-a-validacia
language: sk
---

[Všetky balíky](https://roundly-consulting.com/sk/open-source.md)

[Attributes for Laravel](https://roundly-consulting.com/sk/open-source/navody/attributes-for-laravel.md)

# Definície a validácia

Zaregistrujte známe atribúty s typom a validačnými pravidlami. Zaregistrované atribúty sa pri zápise overujú vždy a ukladajú sa v type z definície:

```php
use RoundlyConsulting\Attributes\Facades\Attributes;
use RoundlyConsulting\Attributes\DataTransferObjects\AttributeDefinitionData;
use RoundlyConsulting\Attributes\Enums\AttributeType;

Attributes::define(new AttributeDefinitionData(
    name: 'rating',
    type: AttributeType::Integer,
    rules: ['min:1', 'max:5'],
));

Attributes::for($product)->set('rating', 9); // throws InvalidAttributeValueException
```

## Registrácia definícií

Definície registrujte v metóde boot() service providera alebo ich zadajte cez konfiguračný kľúč definitions (pozrite Konfigurácia):

```php
namespace App\Providers;

use Illuminate\Support\ServiceProvider;
use Illuminate\Validation\Rule;
use RoundlyConsulting\Attributes\DataTransferObjects\AttributeDefinitionData;
use RoundlyConsulting\Attributes\Enums\AttributeType;
use RoundlyConsulting\Attributes\Facades\Attributes;

class AppServiceProvider extends ServiceProvider
{
    public function boot(): void
    {
        Attributes::defineMany(
            new AttributeDefinitionData('rating', AttributeType::Integer, rules: ['min:1', 'max:5']),
            new AttributeDefinitionData('size', AttributeType::String_, rules: [Rule::in(['S', 'M', 'L'])]),
            new AttributeDefinitionData('launched_at', AttributeType::DateTime),
            new AttributeDefinitionData('tags', AttributeType::Array_, rules: ['max:10']),
        );
    }
}
```

AttributeDefinitionData prijíma name, type, rules, default, required, unique a encrypted — všetko za type je voliteľné. Prípady AttributeType, ktoré kolidujú s kľúčovými slovami PHP, majú na konci podčiarkovník: String\_, Float\_ a Array\_.

## Ako validácia funguje

- Ako prvé sa uplatní pravidlo samotného typu — string, integer, numeric (float), boolean, array alebo date (datetime) — a za ním vaše pravidlá.
- Pravidlá môžu byť reťazce aj objekty pravidiel, presne ako vo validátore Laravelu; názov atribútu slúži v hláseniach ako označenie poľa.
- Hodnoty null sa nikdy nevalidujú.
- Nedefinované názvy sa nevalidujú vôbec — pokiaľ ich neodmietne prísny režim.

## Prísny režim

Nastavte ATTRIBUTES\_STRICT=true a každý nezaregistrovaný názov atribútu sa odmietne — zápis jeho hodnoty či metadát vyhodí UnknownAttributeException. Za zaregistrovaný sa považuje názov s globálnou definíciou (konfigurácia alebo Attributes::define()) alebo s definíciou v schéme modelu vlastníka:

```php
// .env: ATTRIBUTES_STRICT=true

Attributes::define(new AttributeDefinitionData('color', AttributeType::String_));

Attributes::for($product)->set('color', 'white');   // registered: fine
Attributes::for($product)->set('nickname', 'Blue'); // throws UnknownAttributeException
```

## API definícií

Metódy fasády pre definície delegujú na RoundlyConsulting\\Attributes\\Registry\\AttributeRegistry, singleton v kontajneri, ktorý definície uchováva:

| Metóda | Účel |
| --- | --- |
| `define($definition) / defineMany(...$definitions)` | Zaregistruje (alebo nahradí) definície. |
| `has($name) / get($name) / all()` | Prehľad globálnych definícií. |
| `forget($name) / flush()` | Zruší registráciu jednej definície alebo všetkých. |
| `resolveFor(?$owner, $name)` | Definícia platná pre vlastníka — najprv schéma jeho modelu, potom globálna. |
| `definitionsFor($owner)` | Globálne definície prekryté schémou modelu vlastníka. |
| `default($name, ?$owner = null)` | Predvolená hodnota definície. |
| `requiredNames()` | Názvy povinných globálnych definícií. |
| `validate($name, $value) / validateFor(?$owner, $name, $value)` | Overí hodnotu; vyhodí InvalidAttributeValueException. |
| `assertUnique($owner, $name, $value)` | Kontrola jedinečnosti; vyhodí DuplicateAttributeValueException. |
| `isStrict() / assertKnown($name, ?$owner = null)` | Stav a kontrola prísneho režimu — s vlastníkom sa započíta aj schéma jeho modelu; vyhodí UnknownAttributeException. |

```php
use RoundlyConsulting\Attributes\Facades\Attributes;

Attributes::has('rating');                   // bool
Attributes::get('rating')?->rules;           // ['min:1', 'max:5']
Attributes::all();                           // array<string, AttributeDefinitionData>
Attributes::definitionsFor($product);        // global + the model's own schema
Attributes::resolveFor($product, 'rating');  // the definition that applies to this owner
Attributes::default('retries', $product);    // a definition's default value
Attributes::requiredNames();                 // required names among global definitions
Attributes::validate('rating', 4);           // throws InvalidAttributeValueException if invalid
Attributes::forget('rating');                // unregister one
Attributes::flush();                         // unregister all
```

## 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](https://roundly-consulting.com/sk/podporte-nas.md)

Odoslaním daru súhlasíte s našimi [podmienkami prijímania darov](https://roundly-consulting.com/sk/podmienky-darov.md).

[Podporte našu open-source prácu (otvorí sa v novej karte)](https://donate.stripe.com/dRmeVe8FX5PF1Qd9pXcEw00) [Pridajte sa k nám na Patreone (otvorí sa v novej karte)](https://www.patreon.com/cw/roundly)

## 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.

[Ponuka do 48 hodín](https://roundly-consulting.com/sk/kontakt.md) [Prezrieť všetky balíky](https://roundly-consulting.com/sk/open-source/navody/attributes-for-laravel.md)
