aol/transformers

该软件包已被弃用且不再维护。未建议替代包。

一个用于从外部数据存储中归一化属性名称和类型的软件包。

3.1.4 2016-03-11 22:52 UTC

README

Build Status Latest Stable Version Latest Unstable Version Total Downloads Code Climate

这是什么?

Aol/Transformers提供了一种快速处理双向数据转换的方法。这对于在您的应用程序代码中对来自外部或遗留系统的数据进行归一化,甚至清理和限制来自外部HTTP API的响应非常有用。

但为什么不在源头修复数据呢? 如果可以,请这样做!然而,通常情况下,这并不是一个可行的选项,这就是为什么您需要在应用层“修复”数据。

您应该了解两个术语

  • app - “应用程序”的简称,这是我们希望在应用程序中使用的格式。
  • ext - “外部”的简称,这是我们外部使用的格式。

基本用法

在非常基本的使用场景中,可以创建一个新的Transformer实例,并可以动态定义转换定义。查看代码,然后我们将通过实际发生的事情进行讲解。

<?php

$post = ['Id' => '5', 'Title' => 'Awesome Post!', 'post_tags' => '["awesome"]'];

$transformer = new \Aol\Transformers\Transformer;
$transformer->define('id', 'Id', 'intval', 'strval');
$transformer->define('title', 'Title');
$transformer->define('tags', 'post_tags', 'json_decode', 'json_encode');

$post = $transformer->toApp($post);
// ['id' => 5, 'title' => 'Awesome Post!', 'tags' => ['awesome']];

我们从某个外部来源获得一个“帖子”数组。它可以来自MySql、Mongo、API等,来源并不重要。重要的是我们有一个帖子,有几个问题。以下是我们想要更改的事情清单

  1. 所有的键名应该是小写snake_case。哦,还有post_tags有点傻,我们将将其改为`tags`。
  2. 帖子ID始终是数字,让我们将其改为整数。
  3. 帖子标签目前是一个JSON字符串,让我们将其转换为PHP数组。

我们可以通过为每个键创建一个定义来更改所有这些。第一个参数是我们希望在应用程序中使用的键,第二个参数是我们被强加的外部键名。在许多情况下(例如title),只需定义这两个字段就足够了。

如果我们想要真正更改值,我们可以传递另外两个参数。第三个参数是一个将在将数组转换为应用程序格式时应用的回调函数,第四个参数是一个将在将数组转换为外部格式时应用的回调函数。

查看define签名

public function define($app_name, $ext_name, callable $app_func = null, callable $ext_func, $app_args = [], $ext_args = []);
  • $app_name - 这是我们希望在应用程序中使用的键名。
  • $ext_name - 这是我们被强加的外部键名。
  • $app_func - 这是在将数组转换为应用程序格式时应用的可选回调函数。
  • $ext_func - 这是在将数组转换为外部格式时应用的可选回调函数。
  • $app_args - 应用回调函数的可选参数
  • $ext_args - 外部回调函数的可选参数

继承它

通常,重用Transformer非常有用。在这里,创建一个新的类,该类扩展了Transformer类,并在构造函数中实现定义。

<?php

class Post extends \Aol\Transformers\Transformer
{
	public function __construct()
	{
		$this->define('id', 'Id', 'intval', 'strval');
		$this->define('title', 'Title');
		$this->define('tags', 'post_tags', 'json_decode', 'json_encode');
	}
}

利用特质

许多常见的定义可以通过利用工具特质的包装方法进行简化。

<?php

class Post extends \Aol\Transformers\Transformer
{
	use \Aol\Transformers\Utilities\MysqlTrait,
		\Aol\Transformers\Utilities\UtilityTrait;
		
	public function __construct()
	{
		$this->defineId('id', 'Id');
		$this->define('title', 'Title');
		$this->defineJson('tags', 'post_tags');
	}
}

安装

$ composer require aol/transformers ^2

贡献

...

许可证

本项目采用MIT许可证 - 详细信息请参阅LICENSE文件。