Laravel 可转换数据传输对象
发布于 作者: Paul Redmond
Laravel 可转换数据传输对象是由 Jess Archer 为数据库中的 JSON 列转换为值对象而开发的软件包。该软件包扩展了 Spatie 的 data-transfer-object 软件包,并引入了 CastableDataTransferObject
类,该类使用自定义 Eloquent 转换类型(在 Laravel 7 中添加)来实现 Laravel 的“可转换”接口。
以下是一个来自 JSON 列的地址对象的示例,该对象将被转换为可转换对象
namespace App\Values; use JessArcher\CastableDataTransferObject\CastableDataTransferObject; class Address extends CastableDataTransferObject{ public string $street; public string $suburb; public string $state;}
将此与模型的转换结合使用时,您可以像这样配置它
namespace App\Models; use App\Values\Address;use Illuminate\Database\Eloquent\Model; class User extends Model{ protected $casts = [ 'address' => Address::class, ];}
根据 项目自述文件,以上内容是您开始将数据传输进出 JSON 列所需的一切
您现在可以传递 Address 类的实例,甚至可以传递具有兼容结构的数组。它将在您的类和 JSON 之间自动进行转换以进行存储,并且数据将在进出时进行验证。
使用值对象的一个好处是,您可以为转换定义自定义方法,这意味着您可以执行一些很酷的操作,例如实现 __toString()
方法或自定义助手
// Custom helper method$user->address->getCoordinates(); // Convert to a stringecho (string) $user->address;
了解更多
您可以在 GitHub 上详细了解此软件包,获取完整的安装说明以及 查看源代码。Jess 在她的博客 上详细介绍了 此软件包背后的想法,并提供了更多关于其内部工作机制的信息。