redcrystal / cast
Laravel 值对象:轻松将 Eloquent 模型属性转换为值对象!
v1.0.3
2015-12-05 23:44 UTC
Requires
- php: >=5.4
- laravel/framework: >=4.0
Requires (Dev)
- phpunit/phpunit: ^5.0
This package is not auto-updated.
Last update: 2024-09-12 22:46:28 UTC
README
轻松将 Eloquent 模型属性转换为值对象!
要求
此包需要 PHP >= 5.4。强烈推荐使用 PHP 的最新版本。支持 Laravel 4.x 和 5.x。
注意:运行此包的测试需要 PHP >= 5.6。
安装
使用以下命令使用 composer 安装此包
composer require redcrystal/cast
设置
此包允许您轻松地将模型属性转换为实现我们的 RedCrystal\Cast\ValueObject
接口的值对象。下面提供了一个简单的示例。
<?php namespace App\ValueObjects; use RedCrystal\Cast\ValueObject; class Email implements ValueObject { protected $value; public function __construct($value) { $this->value = $value; } public function toScalar() { return $this->value; } public function __toString() { return $this->toScalar(); } }
通过使用包含的 特质
并添加少量配置来设置您的模型。
<?php namespace App; use App\ValueObjects\Email; use Illuminate\Database\Eloquent\Model; use RedCrystal\Cast\CastsValueObjects; class User extends extends Model { use CastsValueObjects; protected $objects = [ // name of the attribute => name of the value object class 'email' => Email::class ]; // ... }
用法
当正常访问模型属性时,任何已设置的转换属性将返回为值对象的一个实例。
$user = User::find($id); $user->email; // returns instance of App\ValueObjects\Email $user->email->toScalar(); // "someone@example.com" (string) $user->email; // "someone@example.com"
您可以使用标量(原生)值或值对象的实例设置已设置的转换属性。
$user = new User(); $user->email = "someone@example.com"; $user->email = new Email("someone@example.com");
许可证
此包是开源软件,许可协议为 MIT 协议。