polidog/hypermedia-bundle

dev-master 2020-02-16 11:53 UTC

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,
        ];
    }
}

IMAGE