dashifen/transformer

一个用于生产转换数据的对象接口和抽象类。

安装: 4,126

依赖者: 1

建议者: 0

安全性: 0

星标: 0

关注者: 2

分支: 0

开放性问题: 1

类型:项目

2.2.0 2020-03-11 14:56 UTC

This package is auto-updated.

Last update: 2024-09-26 23:50:25 UTC


README

在此,我们定义了一个用于Transformer的接口以及一个抽象类,可以从该抽象类构建基于字段名称转换数据的具体对象。目标:标准化Dash在他们的工作中创建转换器的方式。

安装

composer require dashifen/transformer

使用方法

您可以通过扩展 AbstractTransformer 对象或者简单地在自己的实现中实现 TransformerInterface。该接口定义了两个方法

  1. canTransform - 返回一个布尔值,告诉调用范围是否可以根据 $field 参数转换数据。
  2. 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 功能的简单、具体对象。抽象对象的 canTransformtransform 方法的实现确保我们使用 getTransformationMethod 来识别可以转换标记为 $field 的数据的方法名称,然后在需要时调用该方法,并返回其结果。