laravel Transformers中修改data鍵

一、安裝包

github.com/spatie/lara…php

二、建立新的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' => []];
    }
}
複製代碼

三、應用

/** * 酒店基礎信息接口 * @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);
    }
複製代碼

四、其餘

若是直接使用League包也是同樣的,將本身的Serializers引入便可laravel

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

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

複製代碼
相關文章
相關標籤/搜索