prewk/record
Composer 安装命令:
composer require prewk/record
包简介
Immutable validatable record
关键字:
README 文档
README
Validatable records with an API inspired by Immutable Record (but without the memory efficiency..)
Installation
composer require prewk/record
Simple usage
- Extend
\Prewk\Record - Define fields by implementing
getFields() - Define (optional) defaults by implementing
getDefaults() - Construct a base record
- Create new records from that base record
<?php class FooRecord extends \Prewk\Record { /** * Get record fields * @return string[] */ protected function getFields(): array { return ["foo", "bar", "baz"]; } /** * Get defaults * @return array */ protected function getDefaults(): array { return ["foo" => 123, "bar" => null, "baz" => 456]; } } $fooRecord = new FooRecord; // Create a FooRecord $record1 = $fooRecord->make(["foo" => 777, "bar" => 888]); print_r($record1->asArray()); // -> ["foo" => 777, "bar" => 888, "baz" => 456] // Immutibility $record1->set("foo", "This value will disappear into the void"); print_r($record1->asArray()); // -> ["foo" => 777, "bar" => 888, "baz" => 456] $record2 = $record1->set("foo", "This value will end up in record2"); print_r($record2->asArray()); // -> ["foo" => "Yay", "bar" => 888, "baz" => 456]
Validation
- Implement a validator class that extends
\Prewk\Record\ValidatorInterface - Define rules on your record by implementing
getRules() - Every mutation on your record will be routed through your validator
class MyValidator implements \Prewk\Record\ValidatorInterface { /** * Validates a value against a rule * @param mixed $value * @param mixed $rule * @return bool */ public function validate($value, $rule): bool { switch ($rule) { case "numeric": return is_numeric($value); default: throw new \Exception("Invalid rule!"); } } class FooRecord extends \Prewk\Record { /** * Get record fields * @return string[] */ protected function getFields(): array { return ["foo", "bar", "baz"]; } /** * Get defaults * @return array */ protected function getDefaults(): array { return ["foo" => 123, "bar" => null, "baz" => 456]; } /** * Get rules * @return array */ protected function getRules(): array { return ["foo" => "numeric"]; } } $fooRecord = new FooRecord(new MyValidator); $record1 = $fooRecord->make(["foo" => 100]); print_r($record1->asArray()); // -> ["foo" => 777, "bar" => 888, "baz" => 456] $record2 = $fooRecord->make(["foo" => "Will throw exception"]); // -> throws exception "Field name foo didn't validate according to its rules"
Injectable Laravel validated record
<?php class FooRecord extends \Prewk\Record\Laravel\Record { protected function getFields(): array { return ["foo", "bar"]; } protected function getRules(): array { return ["foo" => "in:1,2,3", "bar" => "numeric"]; } } class FooController extends BaseController { private $fooRecord; public function __construct(FooRecord $fooRecord) { $this->fooRecord = $fooRecord; } public function create(FooRequest $request) { $record = $this->fooRecord->make($request->all()); } }
API
// Make a new record from an existing record $record->make(["foo" => "bar"]); // Make a new record from setting $newRecord = $record->set("foo", "bar"); // Check if a field has a value (if field has a default value this returns true) $fooIsSet = $record->has("foo"); // Merge with an array $newRecord = $record->merge(["baz" => "qux"]); // ..or with an existing record $newRecord = $record->merge($record2);
License
MIT
PHP 5
Use 1.1 for PHP versions < 7.0.
prewk/record 适用场景与选型建议
prewk/record 是一款 基于 PHP 开发的 Composer 扩展包,目前已累计 3.9k 次下载、GitHub Stars 达 3, 最近一次更新时间为 2016 年 04 月 06 日, 在 PHP 生态内属于活跃度较高的组件。
它主要适用于以下技术方向: 「record」 「immutable」 等业务场景。在实际项目中,围绕这些方向常见需要落地的问题包括:接口对接、性能调优、并发安全、与既有框架(Laravel / ThinkPHP / Yii / Webman 等)的兼容适配,以及生产环境的日志埋点与稳定性保障。
我们在过去多个企业项目中使用过 prewk/record 或与其功能相近的方案,如果你在选型或落地过程中遇到问题,例如 版本兼容、二次改造、私有化封装、与内部系统对接、生产 BUG 排查,欢迎联系我们协助评估。
基于 prewk/record 在你已有业务上做功能扩展、字段裁剪、UI 适配、与内部账号 / 权限 / 日志系统的深度对接。
线上偶发问题、内存泄漏、慢查询、并发异常等排查修复;针对高流量场景做缓存、队列、索引层面的调优。
承接完整的项目从需求 → 设计 → 开发 → 上线 → 长期运维;也可按月提供技术保姆服务。
与 prewk/record 相关的其它包
同方向 / 同关键字的高下载量 PHP Composer 包推荐,方便对比选型:
Simple, immutable data structures
Propel2 is an open-source Object-Relational Mapping (ORM) for PHP 5.5 and up.
PHP Interface for Babel Street Text Analytics
Anax Database Active Record module for model classes.
Saves data of ext:form in a usable state
Package
统计信息
- 总下载量: 3.9k
- 月度下载量: 0
- 日度下载量: 0
- 收藏数: 3
- 点击次数: 7
- 依赖项目数: 0
- 推荐数: 0
其他信息
- 授权协议: MIT
- 更新时间: 2016-04-06