Documentation Index Fetch the complete documentation index at: https://mintlify.com/charlietyn/openapi-generator/llms.txt
Use this file to discover all available pages before exploring further.
Overview
The Laravel OpenAPI Generator does not currently define custom event classes or listeners. The package focuses on direct generation without event-based workflows.
While the package doesn’t dispatch Laravel events, it does provide logging hooks and cache integration points for observability.
Current State
The service provider includes a placeholder method for future event integration:
Location: src/Providers/OpenApiGeneratorServiceProvider.php
/**
* Placeholder for cache clear listener.
* No event bindings are registered by default.
*/
protected function registerCacheClearListener () : void
{
// Reserved for future event hooks
}
Logging as Event Alternative
The package uses Laravel’s logging system extensively, which can serve as an observability mechanism.
Logging Channel
All generation activities are logged to the openapi channel:
// config/logging.php
'channels' => [
'openapi' => [
'driver' => 'daily' ,
'path' => storage_path ( 'logs/openapi.log' ),
'level' => env ( 'LOG_LEVEL' , 'debug' ),
'days' => 14 ,
],
],
Logged Activities
The generator logs various activities that could be considered “events”:
Route Processing:
Log :: channel ( 'openapi' ) -> info ( 'Nwidart modular structure detected' , [
'uri' => $uri ,
'module' => $module ,
'entity' => $entity ,
]);
API Type Filtering:
Log :: channel ( 'openapi' ) -> info ( 'API type filter set' , [
'types' => $this -> apiTypeFilter ,
'available_types' => array_keys ( config ( 'openapi.api_types' )),
]);
Request Body Generation:
Log :: channel ( 'openapi' ) -> info ( '[buildRequestBody] Using FormRequest/Model data' , [
'source' => $documentation [ 'form_request_class' ] ?? 'Model fallback' ,
'scenario' => $documentation [ 'scenario' ] ?? 'none' ,
'fields' => $exampleFields ,
]);
Location: src/Services/OpenApiServices.php (multiple occurrences)
Monitoring Generation
You can monitor generation by tailing the log file:
# Watch OpenAPI generation logs
tail -f storage/logs/openapi.log
Example Log Output:
[2026-03-07 10:15:32] local.INFO: API type filter set
{"types":["api","mobile"],"available_types":["api","site","mobile","admin"]}
[2026-03-07 10:15:33] local.INFO: Nwidart modular structure detected
{"uri":"api/security/users","module":"security","entity":"users"}
[2026-03-07 10:15:33] local.INFO: Request name generated
{"uri":"api/security/users","route_name":"security.users.index","module":"security","entity":"users","detected_action":"list","technical_name":"security.users.list","display_name":"[API] security.users.list"}
Cache Hooks
While not events, the cache system provides integration points:
Cache Store
When a specification is generated and cached:
Location: src/Services/OpenApiServices.php:110-112
if ( config ( 'openapi.cache.enabled' )) {
Cache :: put ( $cacheKey , $result , config ( 'openapi.cache.ttl' ));
}
Cache Retrieval
When a cached specification is retrieved:
Location: src/Services/OpenApiServices.php:90-95
if ( $useCache && config ( 'openapi.cache.enabled' )) {
$cached = Cache :: get ( $cacheKey );
if ( $cached ) {
return $cached ; // Cache hit
}
}
Cache Clearing
When cache is manually cleared:
Location: src/Services/OpenApiServices.php:1479-1488
public function clearCache () : void
{
$patterns = [
config ( 'openapi.cache.key_prefix' ) . '*' ,
];
foreach ( $patterns as $pattern ) {
Cache :: forget ( $pattern );
}
}
Future Event System
If you need event-based workflows, you can implement them in your application.
Custom Event Example
Define an Event:
// app/Events/OpenApiGenerated.php
namespace App\Events ;
use Illuminate\Foundation\Events\ Dispatchable ;
class OpenApiGenerated
{
use Dispatchable ;
public function __construct (
public array $spec ,
public array $apiTypes ,
public string $format ,
public float $generationTime
) {}
}
Dispatch in Your Code:
use App\Events\ OpenApiGenerated ;
use Ronu\OpenApiGenerator\Facades\ OpenApiGenerator ;
$start = microtime ( true );
$spec = OpenApiGenerator :: generateOpenApi ( apiTypes : [ 'api' ]);
$time = microtime ( true ) - $start ;
event ( new OpenApiGenerated (
spec : $spec ,
apiTypes : [ 'api' ],
format : 'openapi' ,
generationTime : $time
));
Create a Listener:
// app/Listeners/NotifyTeamOfNewSpec.php
namespace App\Listeners ;
use App\Events\ OpenApiGenerated ;
use Illuminate\Support\Facades\ Notification ;
class NotifyTeamOfNewSpec
{
public function handle ( OpenApiGenerated $event ) : void
{
// Send Slack notification
Notification :: route ( 'slack' , config ( 'services.slack.webhook' ))
-> notify ( new SpecGeneratedNotification (
apiTypes : $event -> apiTypes ,
format : $event -> format ,
generationTime : $event -> generationTime
));
}
}
Register the Listener:
// app/Providers/EventServiceProvider.php
protected $listen = [
OpenApiGenerated :: class => [
NotifyTeamOfNewSpec :: class ,
LogSpecGeneration :: class ,
],
];
Potential Event Points
If the package were to implement events, these would be logical dispatch points:
Before Generation
GenerationStarting :: class
Use Cases:
Validate configuration
Log generation request
Clear stale cache
After Generation
GenerationCompleted :: class
Use Cases:
Store spec to database
Upload to CDN or S3
Send notifications
Update documentation site
Cache Events
CacheHit :: class
CacheMiss :: class
CacheCleared :: class
Use Cases:
Monitor cache performance
Trigger cache warming
Alert on cache misses
Route Discovery
Use Cases:
Log discovered routes
Track API growth
Detect new endpoints
Export Events
PostmanExported :: class
InsomniaExported :: class
Use Cases:
Auto-import to collection management
Sync with team workspace
Trigger CI/CD pipelines
Laravel Event Integration
You can hook into Laravel’s existing events:
Model Events
If you store specs in a database:
use App\Models\ ApiSpecification ;
ApiSpecification :: created ( function ( $spec ) {
// New spec version created
event ( new SpecVersionCreated ( $spec ));
});
Cache Events
Listen to Laravel’s cache events:
use Illuminate\Support\Facades\ Event ;
use Illuminate\Cache\Events\ CacheHit ;
use Illuminate\Cache\Events\ CacheMissed ;
Event :: listen ( CacheHit :: class , function ( $event ) {
if ( str_starts_with ( $event -> key , 'openapi_spec_' )) {
// OpenAPI cache hit
logger () -> debug ( 'OpenAPI cache hit' , [ 'key' => $event -> key ]);
}
});
Event :: listen ( CacheMissed :: class , function ( $event ) {
if ( str_starts_with ( $event -> key , 'openapi_spec_' )) {
// OpenAPI cache miss
logger () -> debug ( 'OpenAPI cache miss' , [ 'key' => $event -> key ]);
}
});
Observability Patterns
Telescope Integration
If using Laravel Telescope, generation activities are automatically recorded:
Cache hits/misses
Log entries
HTTP requests (if using routes)
Command execution (Artisan)
View in Telescope:
http://localhost:8000/telescope/logs
http://localhost:8000/telescope/cache
http://localhost:8000/telescope/commands
Custom Metrics
Track generation metrics:
use Illuminate\Support\Facades\ Redis ;
class MetricsListener
{
public function handle ( OpenApiGenerated $event ) : void
{
Redis :: incr ( 'openapi:generations:total' );
Redis :: hincrby ( 'openapi:generations:by_format' , $event -> format , 1 );
Redis :: lpush ( 'openapi:generation_times' , $event -> generationTime );
}
}
Webhook Integration
Trigger webhooks after generation:
use Illuminate\Support\Facades\ Http ;
class WebhookListener
{
public function handle ( OpenApiGenerated $event ) : void
{
Http :: post ( 'https://your-app.com/webhooks/openapi-generated' , [
'api_types' => $event -> apiTypes ,
'format' => $event -> format ,
'path_count' => count ( $event -> spec [ 'paths' ] ?? []),
'generated_at' => now () -> toIso8601String (),
]);
}
}
Scheduled Generation
Use Laravel’s scheduler as a time-based “event” system:
// app/Console/Kernel.php
protected function schedule ( Schedule $schedule )
{
$schedule -> command ( 'openapi:generate --all --no-cache' )
-> daily ()
-> onSuccess ( function () {
// Notify team
event ( new DailySpecGenerated ());
})
-> onFailure ( function () {
// Alert on failure
event ( new SpecGenerationFailed ());
});
}
Public API Programmatic generation API
Configuration Configure logging and cache
Logging Advanced logging configuration
Testing Test generation workflows