tyhand / json-api-tools-bundle
Symfony 的 JSON API 工具
v0.1.19
2017-08-07 17:33 UTC
Requires
- doctrine/doctrine-bundle: ^1.4
- symfony/symfony: 2.8.*
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
如果一切顺利,那么这些功能应该会工作。真正的文档即将到来。