Vytváření vlastních obsazení v systému Laravel
Aplikace Eloquent v systému Laravel poskytuje jednoduchý způsob, jak přiřazovat atributy běžným datovým typům, jako jsou celá čísla, logické symboly, pole a dokonce i objekty. Někdy však vestavěné casty nestačí. V takovém případě je třeba vlastní odlitky přijít. Umožňují definovat vlastní logiku ukládání a načítání atributů modelu.
V tomto příspěvku si ukážeme, jak vytvořit a používat vlastní obsazení v systému Laravel.
Krok 1: Vytvoření vlastní třídy obsazení
Chcete-li vytvořit vlastní obsazení, musíte implementovat příkaz CastsAttributes rozhraní. Toto rozhraní vyžaduje dvě metody:
get($model, $key, $value, $attributes)- použitý při načítání hodnoty z databázeset($model, $key, $value, $attributes)- použitý při ukládání hodnoty do databáze
Zde je příklad vlastního obsazení, které zašifruje a dešifruje hodnotu:
namespace App\Casts; use Illuminate\Contracts\Database\Eloquent\CastsAttributes;use Illuminate\Support\Facades\Crypt; class Encrypted implements CastsAttributes{ public function get($model, $key, $value, $attributes): string { return Crypt::decryptString($value); } public function set($model, $key, $value, $attributes): string { return Crypt::encryptString($value); }}
Toto obsazení automaticky zašifruje hodnotu před uložením do databáze a dešifruje ji při jejím načtení.
Krok 2: Použití vlastního odlitku v modelu
Jakmile je vlastní obsazení připraveno, můžete jej přiřadit atributu modelu pomocí příkazu $casts nemovitosti:
use App\Casts\Encrypted; class User extends Model{ protected $casts = [ 'secret' => Encrypted::class, ];}
Nyní můžete při každém přístupu $user->secret, hodnota bude dešifrována, a když nastavíte $user->secret = 'value', bude před uložením zašifrován.
Další poznámky
- Vlastní obsazení musí být třída, která implementuje
CastsAttributes. - Vlastní obsazení vám dává plnou kontrolu nad chováním atributů.