2017-01-18 5 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();