Laravel 值对象:轻松将 Eloquent 模型属性转换为值对象!

v1.0.3 2015-12-05 23:44 UTC

This package is not auto-updated.

Last update: 2024-09-12 22:46:28 UTC


README

Build Status Latest Stable Version Total Downloads

轻松将 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 协议