Symfony\Component\HttpFoundation\Response; use Symfony\Component\Routing\Attribute\Route; #[Route('api/issue')] class IssueController { #[Route('', methods: ['GET'])] #[OA\Response( response: 200, description: 'List of issues', content: new OA\JsonContent(ref: new Model(type: ListIssuesOutput::class)), )] public function list(): Response { throw new \LogicException('Not implemented'); }
Symfony\Component\HttpFoundation\Response; use Symfony\Component\Routing\Attribute\Route; #[Route('api/issue')] class IssueController { #[Route('', methods: ['GET'])] #[OA\Response( response: 200, description: 'List of issues', content: new OA\JsonContent(ref: new Model(type: ListIssuesOutput::class)), )] public function list(): Response { throw new \LogicException('Not implemented'); } ref: new Model(type: ListIssuesOutput::class) Plain Old PHP Object(POPO)で OK
as OA; use Symfony\Component\HttpFoundation\Response; use Symfony\Component\Routing\Attribute\Route; #[Route('api/issue')] class IssueController { #[Route('', methods: ['GET'])] #[OA\Response( response: 200, description: 'List of issues', content: new OA\JsonContent(ref: new Model(type: ListIssuesOutput::class)), )] public function list(): Response { throw new \LogicException('Not implemented'); } /api/issue: get: operationId: app_issue_list responses: '200': description: 'List of issues' content: application/json: schema: $ref: '#/components/schemas/ListIssuesOutput'
new OA\JsonContent(ref: new Model(type: ListIssuesOutput::class)), )] <?php declare(strict_types=1); namespace App\UseCase\Issue\ListIssues; readonly class ListIssuesOutput { /** * @param list<IssueListItem> $issues */ public function __construct( public array $issues, ) { } }
new OA\JsonContent(ref: new Model(type: ListIssuesOutput::class)), )] <?php declare(strict_types=1); namespace App\UseCase\Issue\ListIssues; readonly class ListIssuesOutput { /** * @param list<IssueListItem> $issues */ public function __construct( public array $issues, ) { } } <?php declare(strict_types=1); namespace App\UseCase\Issue\ListIssues; use Symfony\Component\Uid\Uuid; readonly class IssueListItem { public function __construct( public Uuid $id, public string $summary, public \DateTimeImmutable $createdAt, ) { } }
class CreateIssueInput { public function __construct( #[OA\Property(minLength: 1)] #[Assert\NotBlank] public string $summary, ) { } } Symfony の Validation と併用も可