Všetky výnimky sú v RoundlyConsulting\Attributes\Exceptions a dedia z AttributesException, takže jeden catch pokryje všetky:
| Výnimka | Kedy vznikne | Nesie |
|---|---|---|
UnknownAttributeException | Prísny režim je zapnutý a zápis hodnoty či metadát mieri na atribút bez globálnej definície aj bez definície v schéme modelu. | — |
InvalidAttributeValueException | Hodnota nesplní typ alebo pravidlá definície, prípadne sa nedá previesť na svoj typ. | attributeName, messages(), errorBag() |
DuplicateAttributeValueException | Hodnotu jedinečnej definície už má iný vlastník — zistí sa pred zápisom, alebo ju zachytí unikátny index, keď sa dvaja zapisovatelia predbiehajú. | attributeName, scope |
MissingRequiredAttributeException | validateAttributes() zistí, že povinný atribút chýba. | attributeName |
AttributesException | Základná trieda všetkých štyroch (dedí z RuntimeException). | — |
Chybná konfigurácia — neplatná hodnota v konfigurácii alebo v definícii — namiesto toho vyhodí RoundlyConsulting\PackageToolkit\Exceptions\InvalidConfigurationException z toolkitu, ktorá nededí z AttributesException. Jej správa uvádza chybný kľúč.
Zrozumiteľné validačné chyby
InvalidAttributeValueException nesie názov chybného atribútu aj celý bag validátora. messages() pred každé hlásenie doplní názov atribútu:
use RoundlyConsulting\Attributes\Exceptions\AttributesException;
use RoundlyConsulting\Attributes\Facades\Attributes;
use RoundlyConsulting\Attributes\Exceptions\InvalidAttributeValueException;
try {
Attributes::for($product)->set('rating', 9);
} catch (InvalidAttributeValueException $e) {
$e->attributeName; // 'rating'
$e->messages(); // ['rating: The rating field must not be greater than 5.']
$e->errorBag(); // Illuminate\Support\MessageBag|null
} catch (AttributesException $e) {
report($e); // unknown, duplicate or missing-required attribute
}Ak sa hodnota na svoj typ vôbec nedá previesť, výnimka bag validátora nemá — errorBag() vráti null a messages() prázdny zoznam; dôvod vysvetlí getMessage().
Odpoveď s validačnými chybami
Výnimku znova vyhoďte ako ValidationException z Laravelu a dostanete bežnú odpoveď 422 alebo presmerovanie s chybami:
use Illuminate\Validation\ValidationException;
use RoundlyConsulting\Attributes\Exceptions\InvalidAttributeValueException;
use RoundlyConsulting\Attributes\Facades\Attributes;
try {
Attributes::for($product)->stage()
->set('rating', $request->integer('rating'))
->save();
} catch (InvalidAttributeValueException $e) {
throw ValidationException::withMessages([
(string) $e->attributeName => $e->errorBag()?->all() ?? [$e->getMessage()],
]);
}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.