Laravel 的自定義 casts 功能允許進行定制化的數據轉換,超越了內置 casting 功能,可以處理複雜的數據類型和業務邏輯。
以下是如何使用自定義 casts 進行電話號碼格式化的示例:
<?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) ]); } }
另一個地址格式化的例子:
<?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'] ]); } }
然後,在你的模型中,你可以像這樣使用它們:
class User extends Model { protected $casts = [ 'address' => Address::class, 'phone' => PhoneNumber::class ]; }
自定義 casts 提供了一種簡潔、可重用的方法來處理複雜的數據轉換,同時保持模型簡潔易維護。
以上是用Laravel演員定制數據轉換的詳細內容。更多資訊請關注PHP中文網其他相關文章!