dingo 极简 Transformer
用 dingo 的时候 api 返回 Eloquent 模型数据的时候必须是 item 或者 collection,这时候必须用到 Transformer,但是有时候只需要简单返回模型数据就行,没有额外处理,但是还是需要新建一个 Transformer 类,很麻烦。
直接上干货,
<?php
namespace App\Transformers\Api;
use App\Transformers\BaseTransformer;
use Carbon\Carbon;
use Illuminate\Database\Eloquent\Model;
class SimpleTransformer extends BaseTransformer
{
protected $only = [];
/**
* SimpleTransformer constructor.
* @param array $only
*/
public function __construct(array $only = [])
{
$this->only = $only;
}
public function transform($data)
{
return collect($this->only)->mapWithKeys(function ($kv, $kk) use ($data) {
$key = is_numeric($kk) ? $kv : $kk;
$value = $data->$key;
if ($value instanceof Model) {
throw new \Exception('请不要这样使用,很容易触发 N+1 性能问题');
} elseif ($value instanceof Carbon) {
$value = $value->toDateTimeString();
}
return [
$kv => $value
];
})->toArray();
}
}
可以这样使用,支持别名,自动转化时间
$currentUser = $this->user();
return $this->response->item($currentUser, new SimpleTransformer([
'id',
'name' => 'alias_name', // 支持一个别名
]));
本作品采用《CC 协议》,转载必须注明作者和本文链接
推荐文章: