2017-01-18 32 views
0

我用Laravel 5和Dingo/API開發了一個API。Laravel:Dingo/API分頁自定義根密鑰

繼文檔,我用分頁和我的代碼看起來像

$users = User::paginate(50); 

return $this->response->paginator($users, new UserTransformer); 

不幸的是,響應根密鑰是「數據」

{ 
"data": [ 
{ 
    "id": 1, 
    "username": "superuser", 
...... 

我想改變「數據「是自定義的關鍵,因爲在我的例子中,emberjs得到了這個響應,並試圖與一個不存在的」datum「模型建立鏈接,在大小寫的情況下,需要使用與ember模型同名的關鍵字的RESTAdapter。

我已經嘗試過的響應,但沒有改變

return $this->response->paginator($users, new UserTransformer, ['key' => 'users']); 

return $this->response->paginator($users, new UserTransformer, ['identifier' => 'users']); 

沒有工作的一些參數,我是堅持與「數據」鍵。

有人有解決方案嗎?

預先感謝您。

回答

1

我設法解決了我的問題。

我不修改api.php配置,變壓器保持不變

'transformer' => env('API_TRANSFORMER', Dingo\Api\Transformer\Adapter\Fractal::class), 

首先我創建了一個新的串行

// app/Api/V1/Serializers/CustomJsonSerializer.php 

<?php namespace App\Api\V1\Serializers; 

use League\Fractal\Pagination\CursorInterface; 
use League\Fractal\Pagination\PaginatorInterface; 
use League\Fractal\Serializer\SerializerAbstract; 


/** 
* Create a new Serializer in your project 
*/ 
use League\Fractal\Serializer\ArraySerializer; 

class CustomJsonSerializer extends ArraySerializer 
{ 
    public function collection($resourceKey, array $data) 
    { 
     if ($resourceKey === false) { 
      return $data; 
     } 
     return array($resourceKey ?: 'data' => $data); 
    } 

    public function item($resourceKey, array $data) 
    { 
     if ($resourceKey === false) { 
      return $data; 
     } 
     return array($resourceKey ?: 'data' => $data); 
    } 
} 

而且我設置AppServiceProviders

在我的新的自定義序列
// app\Providers\AppServiceProviders.php 

<?php 

namespace App\Providers; 

use Illuminate\Support\ServiceProvider; 
use Dingo\Api\Transformer\Adapter\Fractal; 
use League\Fractal\Manager; 
use App\Api\V1\Serializers\CustomJsonSerializer; 

class AppServiceProvider extends ServiceProvider 
{ 
    /** 
    * Bootstrap any application services. 
    * 
    * @return void 
    */ 
    public function boot() 
    { 
     $this->app['Dingo\Api\Transformer\Factory']->setAdapter(function ($app) { 
      $fractal = new Manager(); 
      $fractal->setSerializer(new CustomJsonSerializer()); 
      return new Fractal($fractal); 
     }); 
    } 

    /** 
    * Register any application services. 
    * 
    * @return void 
    */ 
    public function register() 
    { 
     // 
    } 
} 

我希望它能幫助ppl :)

-1

或者你可以使用類似這樣的東西

Answer::where('question_id', '=', $questionId) 
    ->join('articles', 'answers.article_id', '=', 'articles.id') 
    ->orderBy('count_thanks', 'desc') 
    ->limit($perPage) 
    ->offset($offset) 
    ->get();