imunew / laravel-value-objects
0.2
2020-12-26 05:32 UTC
Requires
- php: ^7.0|^8.0
- ext-json: *
- illuminate/support: ^5.5|^6|^7|^8
Requires (Dev)
- orchestra/testbench: ^5.1|^6.0
This package is auto-updated.
Last update: 2024-09-26 14:13:36 UTC
README
此包提供了抽象的值对象(不可变)类和 make:value-object
命令。
$ composer require imunew/laravel-value-objects
抽象的值对象(不可变)类
抽象不可变对象类具有以下特性。
- 受Laravel的Eloquent模型启发
- 访问器(
get{Attribute}Attribute
方法) - 数据仅在构造函数中设置
namespace Imunew\Laravel\ValueObjects; /** * Interface Immutable * @package Imunew\Laravel\ValueObjects */ interface Immutable { /** * @param string $name * @return bool */ public function has(string $name); /** * @param string $name * @param mixed|null $default * @return mixed */ public function get(string $name, $default = null); }
make:value-object
命令
您可以通过以下命令创建值对象:
$ php artisan make:value-object {name}
示例 1(Range
)
namespace App\ValueObjects; use Imunew\Laravel\ValueObjects\ImmutableObject; class Range extends ImmutableObject { /** * Range constructor. * @param int $start * @param int $end * @param int $step */ public function __construct(int $start, int $end, int $step = 1) { $this->setAttribute('start', $start); $this->setAttribute('end', $end); $this->setAttribute('step', $step); } /** * @return array */ public function getRangeAttribute() { return range($this->start, $this->end, $this->step); } }
$range = new Range(1, 10); echo $range; // [1,2,3,4,5,6,7,8,9,10]
示例 2(DirectoryTree
)
namespace App\ValueObjects; use Imunew\Laravel\ValueObjects\ImmutableObject; class DirectoryTree extends ImmutableObject { /** * Range constructor. * @param array $directoryTree */ public function __construct(array $directoryTree) { $this->attributes = $directoryTree; } }
$directoryTree = new DirectoryTree([ 'app' => [ 'Http' => [ 'Controllers' => [], 'Middleware' => [], 'Requests' => [], 'Resources' => [], ], 'ValueObjects' => [] ] ]); echo json_encode($directoryTree->get('app.Http')); // {"Controllers":[],"Middleware":[],"Requests":[],"Resources":[]}