API doc example

 avatar
unknown
plain_text
3 days ago
2.1 kB
6
Indexable
<?php

declare(strict_types=1);

namespace Zino\CoreBundle\Controller\Api;

use Nelmio\ApiDocBundle\Annotation\Areas;
use Nelmio\ApiDocBundle\Annotation\Model;
use OpenApi\Attributes\HeaderParameter;
use OpenApi\Attributes\JsonContent;
use OpenApi\Attributes\Parameter as OpenApiParameter;
use OpenApi\Attributes\Response as OpenApiResponse;
use OpenApi\Attributes\Schema;
use OpenApi\Attributes\Tag as OpenApiTag;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\JsonResponse;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Attribute\Route;
use Symfony\Component\Routing\Requirement\EnumRequirement;
use Zino\CoreBundle\Attributes\SpaRoute;
use Zino\CoreBundle\Dto\Features\Error\NotFound\NotFoundResponseBody;
use Zino\CoreBundle\Dto\JsonForm\Form;
use Zino\CoreBundle\Form\Factory\JsonFormEnum;
use Zino\CoreBundle\Form\Factory\JsonFormFactory;

#[Route(path: '/spa/forms', name: 'spa_forms_')]
class FormsApiController extends AbstractController
{
    #[Areas(['new_api'])]
    #[OpenApiParameter(name: 'form', description: 'Returns form', in: 'path', schema: new Schema(type: 'string', enum: JsonFormEnum::class))]
    #[OpenApiResponse(response: Response::HTTP_OK, description: 'Returns schema for requested form', content: new JsonContent(ref: new Model(type: Form::class)))]
    #[OpenApiResponse(response: Response::HTTP_NOT_FOUND, description: 'Happens when requesting undefined form', content: new JsonContent(ref: new Model(type: NotFoundResponseBody::class)))]
    #[HeaderParameter(name: 'X-Locale', description: 'Pass request locale', required: true, schema: new Schema(type: 'string', default: 'en'))]
    #[OpenApiTag(name: 'forms')]
    #[SpaRoute]
    #[Route(
        path: '/{form}',
        name: 'get_form',
        requirements: ['form' => new EnumRequirement(JsonFormEnum::class)],
        methods: ['GET'],
    )]
    public function getForm(JsonFormEnum $form, JsonFormFactory $jsonFormFactory): JsonResponse
    {
        return new JsonResponse($jsonFormFactory->getForm($form)->get());
    }
}
Editor is loading...
Leave a Comment