maymeow/cakephp-api-resource

CakePHP 的 API 资源

安装次数: 252

依赖: 0

建议者: 0

安全: 0

星标: 0

关注者: 3

分支: 0

开放问题: 2

类型:cakephp-plugin

v1.0 2018-05-06 11:04 UTC

README

Beerpay Build Status

JSON API 资源插件用于 CakePHP。此插件受 Laravel 的 JSON API 资源启发。

要求

  • CakePHP 3.6
  • PHP 7.1 或更高版本

安装

Cakephp Api Resource 插件可以通过 Composer 安装

composer require maymeow/cakephp-api-resource

使用方法

创建资源

在这个例子中,我将展示如何创建 UserResource。在你的应用程序中创建新的文件 src/Http/Resources/UserResource.php

UserResource.php 将看起来像这样

<?php
namespace App\Http\Resources;

use MayMeow\API\Resource;

class UserResource extends Resource
{
    public function toArray()
    {
        return [
            'id' => $this->id,
            'email' => $this->email,
            'created_at' => $this->created
        ];
    }
}

接下来,你可以在你的 API 控制器中使用你刚刚创建的资源。以下是一个示例

<?php
// ...
use App\Http\Resources\UserResource;
// ... class definition above
 public function index()
    {
        $query = $this->Users->find();

        $users = UserResource::collection($query);

        $this->set([
            'users' => $users,
            '_serialize' => ['users']
        ]);
    }

单个资源与资源集合

如果你得到一个实体实例,例如 $this->Users->get($id),使用

// BelongsTo, HasOne
$user = (new UserResource($userQuery))->get();

如果你得到多个实例,例如索引 $allUsers = $this->Users->find(),使用

// HasMany, HasAndBelongsToMany
$users = UserResource::collection($query);

匿名函数

如果需要在发送到客户端资源之前更新属性,资源支持匿名函数。以下示例展示了如何发送从 markdown 生成的 HTML

在你的资源文件中

public function toArray()
    {
        return [
            'id' => $this->id,
            'raw_body' => $this->text,
            'html_body' => function ($q) {
                return (new Parsedown())->$text($q->text); // text is parsed before data is send to client
            }
        ];
    }

关联(beta)

资源可以相互包含。

public function toArray()
    {
        return [
            'id' => $this->id,
            'name' => $this->name,
            'profile' => function ($q) {
                return (new ProfileResource($q->profile))->get(); // single entity (belongsTo, HasOne)
            },
            'posts' => function ($q) {
                return PostResource::collection($q->posts); // collection of resources (hasMany)
            }
        ];
    }

已知问题:在 beta 版本中 不要 包含相同的关联,因为会导致无限循环。

贡献

  1. 分支它!
  2. 创建你的功能分支: git checkout -b my-new-feature
  3. 提交你的更改: git commit -am '添加一些功能'
  4. 推送到分支: git push origin my-new-feature
  5. 提交拉取请求 :D

历史

查看更改日志

致谢

  • MayMeow

许可证

MIT