PHP code example of chamber-orchestra / openapi-doc-bundle
1. Go to this page and download the library: Download chamber-orchestra/openapi-doc-bundle library. Choose the download type require.
2. Extract the ZIP file and open the index.php.
3. Add this code to the index.php.
<?php
require_once('vendor/autoload.php');
/* Start to develop here. Best regards https://php-download.com/ */
chamber-orchestra / openapi-doc-bundle example snippets
use ChamberOrchestra\OpenApiDocBundle\Attribute\Operation;
use Symfony\Component\Routing\Attribute\Route;
use Symfony\Component\Security\Http\Attribute\IsGranted;
#[Route('/users/{id}', methods: ['GET'])]
#[IsGranted('ROLE_USER')]
#[Operation(
description: 'Get a user by ID',
responses: [UserView::class],
)]
class GetUserAction
{
public function __invoke(): UserView
{
// ...
}
}
#[Route('/users', methods: ['POST'])]
#[IsGranted('ROLE_ADMIN')]
#[Operation(
description: 'Create a new user',
request: CreateUserForm::class,
responses: [UserView::class],
)]
class CreateUserAction
{
public function __invoke(): UserView { /* ... */ }
}
use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\Extension\Core\Type\ChoiceType;
use Symfony\Component\Form\Extension\Core\Type\EmailType;
use Symfony\Component\Form\Extension\Core\Type\IntegerType;
use Symfony\Component\Form\Extension\Core\Type\TextType;
use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Component\Validator\Constraints as Assert;
class CreateUserForm extends AbstractType
{
public function buildForm(FormBuilderInterface $builder, array $options): void
{
$builder
->add('name', TextType::class, [
'constraints' => [
new Assert\NotBlank(),
new Assert\Length(min: 2, max: 100),
],
])
->add('email', EmailType::class, [
'constraints' => [new Assert\NotBlank(), new Assert\Email()],
])
->add('age', IntegerType::class, [
'
class AddressForm extends AbstractType
{
public function buildForm(FormBuilderInterface $builder, array $options): void
{
$builder
->add('street', TextType::class, ['constraints' => [new Assert\NotBlank()]])
->add('city', TextType::class, ['constraints' => [new Assert\NotBlank()]])
->add('zip', TextType::class);
}
}
class CreateOrderForm extends AbstractType
{
public function buildForm(FormBuilderInterface $builder, array $options): void
{
$builder
->add('title', TextType::class, ['constraints' => [new Assert\NotBlank()]])
->add('address', AddressForm::class); // nested form → $ref
}
}
use Symfony\Component\Form\Extension\Core\Type\CollectionType;
class CreateInvoiceForm extends AbstractType
{
public function buildForm(FormBuilderInterface $builder, array $options): void
{
$builder
->add('number', TextType::class, ['constraints' => [new Assert\NotBlank()]])
->add('lines', CollectionType::class, [
'entry_type' => InvoiceLineForm::class,
'constraints' => [new Assert\Count(min: 1)],
]);
}
}
#[Route('/users', methods: ['GET'])]
#[IsGranted('ROLE_USER')]
#[Operation(
description: 'Search users',
request: SearchUsersForm::class,
responses: [UserListView::class],
)]
class SearchUsersAction
{
public function __invoke(): UserListView { /* ... */ }
}
use Symfony\Component\Form\Extension\Core\Type\ChoiceType;
use Symfony\Component\Form\Extension\Core\Type\IntegerType;
use Symfony\Component\Form\Extension\Core\Type\TextType;
class SearchUsersForm extends AbstractType
{
public function buildForm(FormBuilderInterface $builder, array $options): void
{
$builder
->add('query', TextType::class, ['
use ChamberOrchestra\OpenApiDocBundle\Attribute\Property;
class UserView
{
public Uuid $id;
public string $name;
#[Property(public string $username;
}
use ChamberOrchestra\ViewBundle\Attribute\Type;
use ChamberOrchestra\ViewBundle\View\IterableView;
class UserListView extends IterableView
{
#[Type(UserView::class)]
protected array $entries = [];
}
use ChamberOrchestra\OpenApiDocBundle\Attribute\Extension;
#[Extension('x-entity', User::class)]
#[Extension('x-doc-group', 'users')]
class UserView implements ViewInterface
{
public string $name;
}