jtdsoft / essentials
由 Jordan Dobrev 提供 Essentials
v1.0.7
2019-04-24 12:06 UTC
Requires
- doctrine/inflector: ~1.0
- guzzlehttp/guzzle: ~6.0
- laravel/framework: ^5.4
- umpirsky/country-list: ^2.0
Requires (Dev)
- fzaninotto/faker: 1.4.0
- laravel/laravel: ^5.4
- mockery/mockery: *
- phpspec/phpspec: ~2.1
- phpunit/phpunit: ~6.0
- squizlabs/php_codesniffer: 3.*
- theseer/phpdox: *
- dev-master
- v1.0.7
- v1.0.6
- v1.0.5
- v1.0.4
- v1.0.3
- v1.0.2
- v1.0.1
- v1.0.0
- dev-dependabot/composer/symfony/http-kernel-5.4.20
- dev-dependabot/composer/guzzlehttp/guzzle-7.4.5
- dev-dependabot/composer/guzzlehttp/psr7-1.8.5
- dev-dependabot/composer/laravel/laravel-8.4.4
- dev-dependabot/composer/league/flysystem-1.1.4
- dev-dependabot/composer/laravel/framework-8.40.0
This package is not auto-updated.
Last update: 2024-09-15 03:18:59 UTC
README
DeeToo Essentials 提供工具,可增强您的 Laravel 体验。
模型
DeeToo 模型提供额外的验证层,以保护您免受自己伤害。在您将数据保存到数据库之前,它会验证数据,并验证关系是否存在。它还提供了诸如只读属性和价值对象等额外的功能。
<?php use DeeToo\Essentials\Laravel\Eloquent\Model; use DeeToo\Essentials\Laravel\Eloquent\Types\ArrayType; use DeeToo\Essentials\Laravel\Eloquent\Types\BooleanType; use DeeToo\Essentials\Laravel\Eloquent\Types\DateTimeType; use DeeToo\Essentials\Laravel\Eloquent\Types\DateType; use DeeToo\Essentials\Laravel\Eloquent\Types\EmailType; use DeeToo\Essentials\Laravel\Eloquent\Types\EnumerableType; use DeeToo\Essentials\Laravel\Eloquent\Types\FloatType; use DeeToo\Essentials\Laravel\Eloquent\Types\IntegerType; use DeeToo\Essentials\Laravel\Eloquent\Types\ObjectType; use DeeToo\Essentials\Laravel\Eloquent\Types\RelationType; use DeeToo\Essentials\Laravel\Eloquent\Types\StringType; use DeeToo\Essentials\Laravel\Eloquent\Types\TextType; use DeeToo\Essentials\Laravel\Eloquent\Types\UrlType; use DeeToo\Essentials\Laravel\Eloquent\Types\ValueObjectType; use DeeToo\Essentials\ValueObjects\Country; use DeeToo\Essentials\ValueObjects\Currency; use DeeToo\Essentials\ValueObjects\Temperature; class TestModel extends Model { protected $readOnly = ['read_only']; public function types(): array { return [ 'integer' => new IntegerType(), 'float' => new FloatType(), 'string' => new StringType(), 'boolean' => new BooleanType(), 'datetime' => new DateTimeType(), 'date' => new DateType(), 'email' => new EmailType(), 'enumerable' => new EnumerableType(['one', 'two']), 'array' => new ArrayType(), 'object' => new ObjectType(), 'relation_id' => new RelationType(self::class), 'text' => new TextType(), 'url' => new UrlType(), 'country' => new ValueObjectType(Country::class), 'vo' => new ValueObjectType(Currency::class), 'temp' => new ValueObjectType(Temperature::class), 'read_only' => new StringType(), ]; } }
每种类型都可以设置为可空,并具有默认值
(new IntegerType()) ->nullable() ->default(1)
不同类型可以拥有自己的选项
(new IntegerType()) ->nullable() ->default(1) ->unsigned() ->max(100)
您还可以扩展并创建新的值对象
<?php use DeeToo\Essentials\Exceptions\Error; class Humidity extends ValueObject { public array $serialize = [ 'formatted', ]; public function __construct($value) { parent::__construct(intval($value)); if (!is_numeric($this->value)) { throw new Error('Invalid percentage value :value', ['value' => $this->value]); } if ($this->value > 10000) { throw new Error('Percentage value :value cannot be more than 10000', ['value' => $this->value]); } if ($this->value < 0) { throw new Error('Percentage value :value cannot be more negative', ['value' => $this->value]); } } public function formatted(): string { return format()->percent($this->value); } }
其中 serialize 数组是在将模型转换为 Array/Json 时将被序列化的值的列表。
您还可以创建自己的类型
<?php use DeeToo\Essentials\Exceptions\Error; /** * Class EmailType */ class EmailType extends Type { public function validate($value) { if (filter_var($value, FILTER_VALIDATE_EMAIL) === false) { throw new Error('must be a valid email address'); } } }
您可以添加可以链式的选项。您只需要在 validate 方法中相应地验证它们。
过滤器
DeeToo 过滤器是一种简单的方法,可以通过 Eloquent 模型提供人类可读的 API 过滤器。
<?php use DeeToo\Essentials\Laravel\Eloquent\Model; use DeeToo\Essentials\Laravel\Eloquent\Traits\Filterable; use DeeToo\Essentials\Laravel\Eloquent\Types\StringType; use DeeToo\Essentials\Laravel\Filters\Filters\Search; class FilterableModel extends Model { use Filterable; protected $readOnly = ['read_only']; public function types(): array { return [ 'name' => new StringType(), ]; } public function filters(): array { return [ 'search' => new Search(['name']), ]; } } ## USAGE $model = new FilterableModel(); $model->apply(['search' => 'search_string_to_fetch_records']);
您可以使用任何预定义的过滤器,或通过实现 FilterContract 创建自己的过滤器。