---
title: "Casty a šifrovanie — Options for Laravel | Roundly"
description: "Pretypujte hodnoty ľubovoľným castom Laravelu, vlastným CastsAttributes či castom pre enumy a citlivé nastavenia šifrujte."
url: https://roundly-consulting.com/sk/open-source/navody/options-for-laravel/casty-a-sifrovanie
language: sk
---

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

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

# Casty a šifrovanie

castAs() určuje, ako sa uložená hodnota číta a zapisuje. Prijme ľubovoľný cast Laravelu ako reťazec, vlastný CastsAttributes (class-string alebo inštanciu) alebo class-string castu s parametrami:

```php
public function castAs(): string|CastsAttributes
{
    return 'boolean'; // integer, float, array, collection, immutable_datetime, …
}
```

Dátumy sa vracajú ako inštancie Carbon:

```php
use Illuminate\Contracts\Database\Eloquent\CastsAttributes;
use RoundlyConsulting\Options\BaseOption;

final class TrialEndsAtOption extends BaseOption
{
    public function key(): string
    {
        return 'trial-ends-at';
    }

    public function castAs(): string|CastsAttributes
    {
        return 'immutable_datetime';
    }
}

TrialEndsAtOption::for($team)->set(now()->toImmutable()->addDays(14));
TrialEndsAtOption::for($team)->value(); // CarbonImmutable
```

## Backed enumy

EnumCast pretypuje hodnotu na backed enum a späť — so string aj int hodnotami. Triedu enumu odovzdajte ako parameter castu:

```php
use Illuminate\Contracts\Database\Eloquent\CastsAttributes;
use RoundlyConsulting\Options\BaseOption;
use RoundlyConsulting\Options\Casts\EnumCast;

enum Status: string
{
    case Active = 'active';
    case Paused = 'paused';
}

final class StatusOption extends BaseOption
{
    public function key(): string
    {
        return 'status';
    }

    public function castAs(): string|CastsAttributes
    {
        return EnumCast::class.':'.Status::class; // backed-enum cast (string- or int-backed)
    }
}

Options::set(StatusOption::class, Status::Paused);  // stores 'paused'
Options::get(StatusOption::class);                 // Status::Paused
```

Ukladá hodnotu, ktorá stojí za enumom, a vracia prípad (case). Pri enume s int hodnotami sa číselný reťazec z textového stĺpca najprv prevedie na int. set() prijme case alebo jeho hodnotu (Status::Active alebo „active“); čokoľvek iné — preklep v reťazci, case iného enumu, prázdny reťazec — vyhodí InvalidOptionPayload a nič sa neuloží. Pri čítaní sa prázdna uložená hodnota aj hodnota, ktorá nie je prípadom enumu (napríklad z riadku zapísaného mimo balíka), namiesto výnimky prečíta ako null. Môžete vrátiť aj new EnumCast(Status::class) — inštanciu castu však nemožno šifrovať a v definíciách skupín sa zobrazí s typom custom.

## Šifrovanie

Ak encrypted() vráti true, hodnota sa v úložisku zašifruje. Serializuje sa cez svoj cast, zašifruje enkryptorom Laravelu a pri čítaní sa dešifruje a pretypuje späť — šifrované nastavenie s castom integer sa teda prečíta ako int:

```php
use Illuminate\Contracts\Database\Eloquent\CastsAttributes;
use RoundlyConsulting\Options\BaseOption;

final class ApiTokenOption extends BaseOption
{
    public function key(): string
    {
        return 'api-token';
    }

    public function castAs(): string|CastsAttributes
    {
        return 'string'; // must be a string when encrypted
    }

    public function encrypted(): bool
    {
        return true;
    }
}

Options::set(ApiTokenOption::class, 'tok_example_123', $tenant); // ciphertext at rest
Options::get(ApiTokenOption::class, $tenant);                    // 'tok_example_123'
```

- Pri encrypted() = true musí castAs() vracať reťazec — 'integer', 'boolean', 'collection', class-string castu ako EnumCast::class.':'.Status::class, … Inštancia castu vyhodí EncryptionNotSupported.
- Každý cast sa vráti v pôvodnom type: vnútorný cast hodnotu pred zašifrovaním serializuje a po dešifrovaní ju znova pretypuje, takže celé čísla, booleany, dátumy, kolekcie aj enumy prídu späť vo svojom type.
- Šifruje sa kľúčom APP\_KEY. Pozmenený šifrový text pri čítaní vyhodí DecryptException z Laravelu.
- Pamäť requestu aj trvalá cache držia vždy len šifrový text — cache úložisko čitateľnú hodnotu nikdy neuvidí.
- Eventy, observery aj definície skupín vidia hodnotu v čitateľnej podobe — dajte si pozor, čo logujete.

## Čítanie vždy vráti typ castu

set() uloží hodnotu tak, ako by ju uložila databáza — ako surový reťazec, ktorý vytvorí jej cast — a do cache dá práve ten, nie váš vstup. Každé čítanie ho pretypuje, aj to hneď po set(): „active“ uložené do enumového nastavenia vráti Status::Active, nastavenie s castom integer s hodnotou „5“ vráti 5 a nastavenie s castom collection, do ktorého uložíte pole, vráti Collection. Aj options:set, ktorý odovzdá reťazec (alebo s --json dekódovaný JSON), sa tak hneď prečíta v type nastavenia.

## 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/options-for-laravel.md)
