dashifen / transformer
一个用于生产转换数据的对象接口和抽象类。
2.2.0
2020-03-11 14:56 UTC
Requires
- php: >=7.3
- dashifen/exception: ^1.2
README
在此,我们定义了一个用于Transformer的接口以及一个抽象类,可以从该抽象类构建基于字段名称转换数据的具体对象。目标:标准化Dash在他们的工作中创建转换器的方式。
安装
composer require dashifen/transformer
使用方法
您可以通过扩展 AbstractTransformer
对象或者简单地在自己的实现中实现 TransformerInterface
。该接口定义了两个方法
canTransform
- 返回一个布尔值,告诉调用范围是否可以根据$field
参数转换数据。transform
- 返回一个基于$field
参数转换后的$value
。
AbstractTransformer
实现了这两个方法,同时要求您定义第三个方法:一个受保护的 getTransformationMethod
方法。它返回另一个方法的名字,这个方法假设可以转换标记为 $field
的数据。
示例
在这个示例中,我们假设应用程序的字段命名规范是使用连字符格式。
class Transformer extends AbstractTransformer { protected function getTransformationMethod(string $field): string { // to convert a kebab-case $field to a function name, we want to // convert it to StudlyCaps. so, first, we convert from kebab-case to // camelCase and then we ucfirst() the camelCase string to make it // studly. finally, we add the word "transform." Thus, a start-date // field becomes startDate, then StartDate, and finally we return // transformStartDate. $camelCase = preg_replace_callback("/-([a-z])/", function (array $matches): string { return strtoupper($matches[1]); }, $field); return "transform" . ucfirst($camelCase); } private function transformStartDate(string $date): string { // we assume that $date has already been validated, so here we just // want to make sure it's in YYYY-MM-DD format. strtotime() can help // with that! return date("Y-m-d", strtotime($date)); } }
上面的这个小类代表了一个基于此仓库中 AbstractTransformer
功能的简单、具体对象。抽象对象的 canTransform
和 transform
方法的实现确保我们使用 getTransformationMethod
来识别可以转换标记为 $field
的数据的方法名称,然后在需要时调用该方法,并返回其结果。