编程

[Laravel 扩展包] Laravel Value Objects -- Laravel 多功能值对象包

834 2022-11-02 16:48:06

Laravel Value Objects 是一个你可以在 Laravel 中应用的通用值对象集合。值对象(Value Object) 帮助展示简单的实体,如金额或者 2D 坐标轴中 X/Y 坐标。确切地说,这个包提供了以下这些值对象:

  • Boolean
  • Number
  • Text
  • Email
  • Full Name
  • Name
  • Tax Number
  • UUID

比如用户的全名,你需要将 name 字符串拆分成姓氏和名字:

$name = new FullName(' Joe User ');
 
$name->fullName(); // 'Joe User'
$name->firstName(); // 'Joe'
$name->lastName(); // 'User'

这个包同时也提供过了一些 专用于 Laravel 的接口,比如通过 Laravel 的 Macroable trait 和 Conditionable trait 扩展值对象。

TaxNumber::from('PL0123456789')
    ->when(function ($number) {
        return $number->prefix() !== null;
    })
    ->prefix();

另一个例子是 Number 值对象,你可以用来限定数字的刻度(小数点位数):

$number = new Number('10.20999', scale: 2);
$number = Number::make('10.20999', scale: 2);
$number = Number::from('10.20999', scale: 2);
 
$number->value();   // '10.20'
(string) $number;   // '10.20'
$number->toArray(); // ['10.20']

如你所见,该包也提供了一些静态构造方法,你可以使用 makeOrNull() 静态构造器创建值对象,处理验证数据。