polidog/ hypermedia-bundle
支持Hal
dev-master
2020-02-16 11:53 UTC
Requires
- php: ^7.1
- ext-json: *
- doctrine/common: ^2.6
- polidog/simple-api-bundle: ^0.0.7
- symfony/config: ^3.4|^4.4
- symfony/dependency-injection: ^3.4|^4.4
- symfony/event-dispatcher: ^3.4|^4.4
- symfony/http-foundation: ^3.4|^4.4
- symfony/http-kernel: ^3.4|^4.4
- symfony/routing: ^3.4|^4.4
This package is auto-updated.
Last update: 2024-09-16 22:13:17 UTC
README
HypermediaAPI包。此包只支持HAL json。您还需要polidog/simple-api-bundle
安装
$ composer require polidog/hypermedia-bundle "dev-master"
<?php return [ ... Polidog\SimpleApiBundle\PolidogSimpleApiBundle::class => ['all' => true], Polidog\HypermediaBundle\HypermediaBundle::class => ['all' => true] ];
将包配置引入到您的配置文件中
# config/packages/polidog_hypermedia.yml polidog_hypermedia: ~ hal_content_type: false # default false
如果hal_content_type
为true,则需要请求头为application/hal+json
。
使用方法
<?php declare(strict_types=1); namespace App\Controller\Api\Projects; use App\Repository\ProjectRepository; use Polidog\HypermediaBundle\Annotations\Embed; use Polidog\HypermediaBundle\Annotations\Link; use Polidog\SimpleApiBundle\Annotations\Api; use Symfony\Component\Routing\Annotation\Route; /** * @Route("/projects/{code}/detail", requirements={"code"}) * @Api(statusCode=200) * * @Embed(rel="members", src="/api/projects/{code}/members") * * @Link(rel="projects", href="/projects") * @Link(rel="project-new", href="/projects/new") * */ class DetailController { /** * @var ProjectRepository */ private $repository; public function __construct(ProjectRepository $repository) { $this->repository = $repository; } /** * @return array<string,array|null> */ public function __invoke(string $code): array { $project = $this->repository->findProjectCode($code); return [ 'project' => null !== $project ? $project->export() : null, ]; } }