leeduc/json-api-builder

此包自动生成数据遵循 jsonapi.org。

v0.1.6 2016-07-08 04:19 UTC

This package is not auto-updated.

Last update: 2024-09-14 18:47:42 UTC


README

Latest Version on Packagist Build Status Coverage Status Total Downloads Software License

此包自动生成数据遵循 jsonapi.org。

安装

通过 Composer

$ composer require leeduc/json-api-builder

完成此操作后,您需要将服务提供者添加到 app.php 配置文件中的 providers 数组中,如下所示

'providers' => [
    // ...
    Leeduc\JsonApiBuilder\JsonApiBuilderServiceProvider::class,
]

接下来,在 app.php 配置文件中,在 aliases 数组下,您可能还想添加门面。

'aliases' => [
    // ...
    'JsonApiBuilder' => Leeduc\JsonApiBuilder\Facades\JsonApiBuilder::class,
]

用法

在资源文件夹 views 中构建模式

posts.view = app\resources\views\posts\show.schema.php

return [
  'id' => $data->id,
  'type' => class_basename($data),
  'attributes' => [
    'name' => $data->name,
    'email' => $data->email
  ],
  'relationships' => [
    'posts' => [
      'partial' => 'posts.show',
      'links' => [
        'self' => route('get_user', ['id' => $data->id]) . '/relationships/posts',
        'related' => route('get_user', ['id' => $data->id]) . '/posts'
      ]
    ],
    'comments' => [
      'partial' => 'comments.show',
      'links' => [
        'self' => route('get_user', ['id' => $data->id]) . '/relationships/comments',
        'related' => route('get_user', ['id' => $data->id]) . '/comments'
      ]
    ]
  ],
  'links' => [
    'self' => route('get_user', ['id' => $data->id])
  ]
];

构建数组

$data = $users = User::with('comments')->paginate(10); // List
$data = $users = User::with('comments')->first(); // Object

$builder = \JsonApiBuilder::setData($data)
                    ->entity('view.path.name', function($data) {
                        $data['id'] = 100;
                        return $data;
                    })
                    ->relationship(['comments'])
                    ->included(['comments' => ['post_id', 'content']]);

dd($builder->parse()); // Array data

构建 JSON

$builder = \JsonApiBuilder::setData($data)
                    ->entity('package::view.path.name', function($data) {
                        // custom entity data
                        return $data;
                    })
                    ->relationship(['comments'])
                    ->included(['comments'])
                    ->json(['version' => '1.0'])
                    ->meta([
                      'version' => '1.0'
                    ])
                    ->pagination([
                      'next' => 'example/next',
                      'pre' => 'example/pre'
                    ])
                    ->response();

dd($builder); // Class Symfony\Component\HttpFoundation\Response
dd($builder->getContent()); // Get Json

JSON 响应

{
  "data": [
    {
      "id": 1,
      "type": "user",
      "attributes": {
        "name": "Pj2EHmiLOH",
        "email": "Tqxfq6aZDk@gmail.com"
      },
      "links": {
        "self": "http://example.com/user\/1"
      },
      "relationships": {
        "comments": {
          "data": [
            {
              "id": 2,
              "type": "comment"
            },
            {
              "id": 8,
              "type": "comment"
            }
          ],
          "links": {
            "self": "http://example.com/user\/1\/relationships\/comments",
            "related": "http://example.com/user\/1\/comments"
          }
        }
      }
    }
  ],
  "included": [
    {
      "id": 2,
      "type": "comment",
      "attributes": {
        "post_id": "3",
        "user_id": "1",
        "content": "UHXLbmJxySxiTTYdjzR539bNXjohgpCVj0WfwvmZWKUonhUipxJeHPh0AtTWqIZpzLZfixawJJEQwqILf93Co5edPOrKDfaqvkSQ"
      },
      "relationships": {
        "user": {
          "data": [
            {
              "id": 1,
              "type": "user"
            }
          ],
          "links": {
            "self": "http://example.com/comment\/2\/relationships\/user"
          }
        }
      }
    },
    {
      "id": 8,
      "type": "comment",
      "attributes": {
        "post_id": "2",
        "user_id": "1",
        "content": "Y8kDX5EOQFtqoy4171bGFVNrvYgMRr9UVHQvD7Eed43YgzeZ1KFJipTFCMJVu6rtb4V8Fm14mv2t3aN26CRNgiOqDsGiMPbQyVJF"
      },
      "relationships": {
        "user": {
          "data": [
            {
              "id": 1,
              "type": "user"
            }
          ],
          "links": {
            "self": "http://example.com/comment\/8\/relationships\/user"
          }
        }
      }
    }
  ],
  "jsonapi": {
    "version": "1.0"
  },
  "links": {
    "self": "http://example.com/test",
    "first": "http://example.com/test?page%5Bsize%5D=1&page%5Bnumber%5D=1",
    "next": "http://example.com/test?page%5Bsize%5D=1&page%5Bnumber%5D=2",
    "last": "http://example.com/test?page%5Bsize%5D=1&page%5Bnumber%5D=40"
  }
}

变更日志

有关最近更改的更多信息,请参阅 CHANGELOG

贡献

有关详细信息,请参阅 CONTRIBUTINGCONDUCT

安全性

如果您发现任何安全相关的问题,请通过电子邮件 lee.duc55@gmail.com 而不是使用问题跟踪器。

致谢

许可证

MIT 许可证 (MIT)。有关更多信息,请参阅 许可证文件