La fonctionnalité Custom Casts de Laravel permet une conversion de données personnalisée, au-delà des capacités de coulée intégrées pour gérer les types de données complexes et la logique métier.
Ce qui suit est un exemple de la façon de formater les numéros de téléphone à l'aide de moulages personnalisés:
<?php namespace App\Casts; use Illuminate\Contracts\Database\Eloquent\CastsAttributes; use Illuminate\Database\Eloquent\Model; class PhoneNumber implements CastsAttributes { public function get(Model $model, string $key, mixed $value, array $attributes): string { return sprintf( "+%d (%d) %d-%d", ...explode('|', $value) ); } public function set(Model $model, string $key, mixed $value, array $attributes): string { $value = preg_replace('/[^0-9]/', '', $value); return implode('|', [ substr($value, 0, 1), substr($value, 1, 3), substr($value, 4, 3), substr($value, 7) ]); } }
Un autre exemple de formatage d'adresse:
<?php namespace App\Casts; use Illuminate\Contracts\Database\Eloquent\CastsAttributes; use Illuminate\Database\Eloquent\Model; class Address implements CastsAttributes { public function get(Model $model, string $key, mixed $value, array $attributes): array { $data = json_decode($value, true); return [ 'street' => $data['street'], 'city' => $data['city'], 'state' => $data['state'], 'postal_code' => $data['postal_code'], 'formatted' => sprintf( '%s, %s, %s %s', $data['street'], $data['city'], $data['state'], $data['postal_code'] ) ]; } public function set(Model $model, string $key, mixed $value, array $attributes): string { return json_encode([ 'street' => $value['street'], 'city' => $value['city'], 'state' => $value['state'], 'postal_code' => $value['postal_code'] ]); } }
Ensuite, dans votre modèle, vous pouvez les utiliser comme ceci:
class User extends Model { protected $casts = [ 'address' => Address::class, 'phone' => PhoneNumber::class ]; }
Les moulages personnalisés fournissent un moyen simple et réutilisable de gérer les transformations de données complexes tout en gardant le modèle simple et facile à maintenir.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!