tyhand/json-api-tools-bundle

Symfony 的 JSON API 工具

安装: 59

依赖者: 0

建议者: 0

安全: 0

星标: 0

关注者: 2

分支: 0

开放问题: 0

类型:symfony-bundle

v0.1.19 2017-08-07 17:33 UTC

README

这是一个用于加速在 Symfony 中编写 JSON API 标准的 API 的粗糙草案集合。尚未完成,且非常丑陋。

安装

使用 composer 添加

composer require "tyhand/json-api-tools-bundle" "^0.1.2"

添加到 AppKernel

$bundles = array(
  // ...
  new TyHand\JsonApiToolsBundle\TyHandJsonApiToolsBundle(),
  // ...
);

创建资源

例如,这里有书籍资源

<?php
// BookResource

namespace AppBundle\ApiResource;

use TyHand\JsonApiToolsBundle\Annotation\Resource;
use TyHand\JsonApiToolsBundle\Annotation\Attribute;
use TyHand\JsonApiToolsBundle\Annotation\HasOne;
use TyHand\JsonApiToolsBundle\Annotation\Filter;
use TyHand\JsonApiToolsBundle\Annotation\Validator;
use TyHand\JsonApiToolsBundle\Extra\SearchableResource;

/**
 * @Resource(entity="AppBundle\Entity\Book")
 */
class BookResource extends SearchableResource
{
    /**
     * @Attribute
     */
    public $title;
    
    /**
     * @Attribute
     */
    public $genre;
    
    /**
     * @HasOne
     */
    public $author;
    
    protected function getSearchableEntityFields()
    {
        return [
            'genre',
            'title',
            ['property' => 'author.name', 'joinType' => 'outer']
        ];
    }
}

这里还有一个与上述示例连接的作者资源

<?php
// Author Resource
namespace AppBundle\ApiResource;

use TyHand\JsonApiToolsBundle\Annotation\Resource;
use TyHand\JsonApiToolsBundle\Annotation\Attribute;
use TyHand\JsonApiToolsBundle\Annotation\HasMany;
use TyHand\JsonApiToolsBundle\Annotation\Filter;
use TyHand\JsonApiToolsBundle\Annotation\Validator;

use TyHand\JsonApiToolsBundle\ApiResource\JsonApiResource;
use TyHand\JsonApiToolsBundle\ApiResource\Resource as ApiResource;

/**
 * @Resource(entity="AppBundle\Entity\Author")
 */
class AuthorResource extends ApiResource
{
    /**
     * @Attribute
     */
    public $name;

    /**
     * @HasMany
     */
    public $books;
}

标签资源

将资源标记为服务

# services.yml

services:
    author_resource:
        class: AppBundle\ApiResource\AuthorResource
        tags:
            - { name: jsonapi_tools.resource }
    book_resource:
        class: AppBundle\ApiResource\BookResource
        tags:
            - { name: jsonapi_tools.resource }

创建控制器

只需继承资源控制器即可快速设置

<?php
// BookController

namespace AppBundle\Controller;

use JsonApiBundle\Controller\ResourceController;

class BookController extends ResourceController
{
}

路由

# routing.yml

jsonapi_author:
    resource: AppBundle\Controller\AuthorController
    type:     jsonapi_resource

jsonapi_book:
    resource: AppBundle\Controller\BookController
    type:     jsonapi_resource

如果一切顺利,那么这些功能应该会工作。真正的文档即将到来。