首页 > 后端开发 > php教程 > 用Laravel演员定制数据转换

用Laravel演员定制数据转换

百草
发布: 2025-03-06 02:31:09
原创
809 人浏览过

Customizing Data Transformations with Laravel Casts

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中文网其他相关文章!

本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板