2017-01-18 8 views
0

Я разработал API с Laravel 5 и Dingo/API.Laravel: Dingo/API Pagination пользовательский корневой ключ

После документации я использовал нумерацию страниц и мой код похож на того

$users = User::paginate(50); 

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

К сожалению, корневой ключ ответ «данные»

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

Я хотел бы изменить «данные «ключ к пользовательскому, потому что в моем случае emberjs получит этот ответ и попытается сделать ссылку с моделью« нулевой точки », которая не существует, ключ должен быть задан с тем же именем, что и модель 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();