Menu

Enfin des casts Eloquent personnalisés sur Laravel !

Publié en Mars 2020 - Développement web, Logiciel Libre

custom-cast-laravel

Laravel possède depuis longtemps des accesseurs et des mutateurs qui nous facilite grandement la vie. Puis l'ajout des casts à permis de ne plus s’embêter à gérer les champs de type date, json, array, etc. Mais le fait de pouvoir faire ses propres casts a toujours été une fonctionnalité très attendu et depuis la v7 c'est enfin possible.

 

Exemple d'utilisation

  • Créer le cast personnalisé
<?php
namespace App\Models\Casts;

use Illuminate\Contracts\Database\Eloquent\CastsAttributes;

class EncryptCast implements CastsAttributes
{
    public function get($model, $key, $value, $attributes)
    {
        return decrypt($value);
    }
    public function set($model, $key, $value, $attributes)
    {
        return [$key => encrypt($value)];
    }
}
  • Utiliser le cast dans un modèle
<?php
namespace App\Models;

use Eloquent;

class Lorem extends Eloquent
{
    protected $casts = [
        'secret' => Casts\EncryptCast::class
    ];
}

 

Utilisation pratique

De notre coté, nous utilisons ce type de cast pour par exemple, enregistrer en base de donnée des tags sous forme de chaine séparé par des virgules et les récupérer sous forme de collection. Ou même, simplifier le mapping entre des clés en base de donnée avec leur traduction d'un fichier de langue.

Bien sûr cela devient encore plus intéressant en utilisant des value object...