laravel Transformers中修改data键

416 阅读1分钟

1、安装包

github.com/spatie/lara…

2、创建新的ArraySerializer

use League\Fractal\Serializer\ArraySerializer;

class HotelArraySerializer extends ArraySerializer
{
    /**
     * Serialize a collection.
     *
     * @param string $resourceKey
     * @param array  $data
     *
     * @return array
     */
    public function collection($resourceKey, array $data)
    {
        return ['hotels' => $data];
    }

    /**
     * Serialize an item.
     *
     * @param string $resourceKey
     * @param array  $data
     *
     * @return array
     */
    public function item($resourceKey, array $data)
    {
        return ['hotels' => $data];
    }

    /**
     * Serialize null resource.
     *
     * @return array
     */
    public function null()
    {
        return ['hotels' => []];
    }
}

3、应用

    /**
     * 酒店基础信息接口
     * @param Request $request
     * @return string
     */
    public function getFullHotelInfo(Request $request)
    {
        $skip       = $request->get("param.skip", 3);
        $limit      = $request->get("param.limit", 10);
        $paginator  = Hotel::query()->paginate($limit, ['*'], 'skip', $skip);
        $datas      = fractal($paginator->getCollection(), HotelTransformer::class, HotelArraySerializer::class);
        return $this->service->encrypt_openssl($this->json($datas), 'AES-128-ECB', $this->key);
    }

4、其他

如果直接使用League包也是一样的,将自己的Serializers引入即可


use Acme\Transformer\BookTransformer;
use League\Fractal;

$resource = new Fractal\Resource\Item($book, new BookTransformer);
$resource = new Fractal\Resource\Collection($books, new BookTransformer);