Skip to content

redcrystalcode/laravel-value-objects

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

14 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Laravel Value Objects

Build Status Latest Stable Version Total Downloads

Cast your Eloquent model attributes to value objects with ease!

Requirements

This package requires PHP >= 5.4. Using the latest version of PHP is highly recommended. Laravel 4.x and 5.x are supported.

Note: Running tests for this package requires PHP >=5.6.

Install

Require this package with composer using the following command:

composer require redcrystal/cast

Set Up

This package lets you easily cast your model attributes to Value Objects that implement our RedCrystal\Cast\ValueObject interface. A simple example is provided below.

<?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();
    }
}

Set up your model by using the included Trait and adding a tiny bit of configuration.

<?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
	];
	
	// ...
}

Usage

When accessing attributes of your model normally, any attribute you've set up for casting will be returned as an instance of the Value Object.

$user = User::find($id);

$user->email; // returns instance of App\ValueObjects\Email
$user->email->toScalar(); // "someone@example.com"
(string) $user->email; // "someone@example.com"

You can set an attribute set up for casting with either a scalar (native) value, or an instance of the Value Object.

$user = new User();

$user->email = "someone@example.com";
$user->email = new Email("someone@example.com");

License

This package is open-source software licensed under the MIT license.

About

Cast your Eloquent model attributes to Value Objects with ease.

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages