## Getting Started
### Minimal Setup
1. **Installation**:
```bash
composer require appstone/api-doc-bundle
Ensure your AppKernel.php (or config/bundles.php for Symfony 4+) includes:
new Appstone\ApiDocBundle\ApiDocBundle(),
Enable Annotations:
Add this to your config/packages/nelmio_api_doc.yaml (create if missing):
nelmio_api_doc:
documentation:
info:
title: "Your API"
description: "API Documentation"
version: "1.0.0"
First Use Case: Annotate a controller method to generate docs:
use Nelmio\ApiDocBundle\Annotation\ApiDoc;
class UserController extends Controller
{
/**
* @ApiDoc(
* resource=true,
* description="Get a user",
* statusCodes={200="Returns user data"}
* )
*/
public function getUserAction()
{
return $this->json(['id' => 1, 'name' => 'John']);
}
}
Access Docs:
Visit /doc (default route) to see the generated Swagger UI.
Controller Annotations:
Use @ApiDoc on methods to define endpoints:
/**
* @ApiDoc(
* resource=true,
* description="Create a user",
* input="App\Entity\User",
* statusCodes={
* 201="User created",
* 400="Invalid input"
* }
* )
*/
public function postUserAction(Request $request)
{
// ...
}
Request/Response Models:
Define models in YAML (e.g., config/api_doc/models/user.yml):
User:
properties:
id:
type: integer
description: User ID
name:
type: string
description: User name
Grouping Routes:
Use groups in annotations to organize endpoints:
/**
* @ApiDoc(
* resource=true,
* description="User operations",
* groups={"users"}
* )
*/
Authentication:
Configure security in nelmio_api_doc.yaml:
nelmio_api_doc:
areas:
path_patterns:
- ^/api(?!/doc$) # Exclude doc route
securityDefinitions:
api_key:
type: apiKey
in: header
name: X-API-KEY
Dynamic Documentation: Extend the bundle with custom annotations or services:
// src/Service/CustomDocBuilder.php
class CustomDocBuilder extends AbstractDocBuilder
{
public function build()
{
// Add custom logic
}
}
Annotation Parsing:
annotations: true is set in config/packages/framework.yaml:
framework:
annotations: true
attributes: true and migrate to attributes (e.g., #[\Nelmio\ApiDoc\Annotation\ApiDoc(...)]).Route Conflicts:
/doc route may conflict with existing routes. Customize the route in nelmio_api_doc.yaml:
nelmio_api_doc:
routes:
default:
path: /api-docs
Caching Issues:
php bin/console cache:clear
Symfony 4+ Compatibility:
nelmio/api-doc-bundle (the original package) instead, as this fork (appstone/api-doc-bundle) lacks maintenance.Missing Dependencies:
require-dev section lists optional bundles (e.g., friendsofsymfony/rest-bundle). Install them if you need advanced features like request/response validation.Check Generated JSON:
Visit /doc/json to inspect the raw OpenAPI spec. Validate it using Swagger Editor.
Enable Debug Mode:
Set debug: true in nelmio_api_doc.yaml to log issues:
nelmio_api_doc:
debug: true
Common Errors:
nelmio_api_doc.routes config.use Nelmio\ApiDocBundle\Annotation\ApiDoc).Custom Templates:
Override Twig templates in templates/NelmioApiDocBundle/ to modify the UI.
Event Listeners:
Subscribe to NelmioApiDocBundle.EventListener events to modify docs dynamically:
// src/EventListener/CustomDocListener.php
class CustomDocListener implements EventSubscriberInterface
{
public static function getSubscribedEvents()
{
return [
NelmioApiDocBundle::DOCUMENTATION_BUILD => 'onDocumentationBuild',
];
}
public function onDocumentationBuild(DocumentationEvent $event)
{
$event->getDocumentation()->setInfo('custom', 'value');
}
}
Integrate with API Platform:
If using api-platform/core, combine with nelmio/api-doc-bundle for seamless OpenAPI generation.
Localization:
Extend the bundle to support multi-language docs by overriding the Twig translations in translations/.
---
**Note**: This assessment assumes the package is a fork of `nelmio/api-doc-bundle` with minor changes. For production use, prefer the original [`nelmio/api-doc-bundle`](https://github.com/nelmio/NelmioApiDocBundle), which is actively maintained. The `appstone` fork appears abandoned (0 stars, no commits). Always verify compatibility with your Symfony version.
How can I help you explore Laravel packages today?