| Package Data | |
|---|---|
| Maintainer Username: | uraankhayayaal | 
| Package Create Date: | 2024-12-22 | 
| Package Last Update: | 2024-12-25 | 
| Language: | PHP | 
| License: | MIT | 
| Last Refreshed: | 2025-11-04 03:03:55 | 
| Package Statistics | |
|---|---|
| Total Downloads: | 35 | 
| Monthly Downloads: | 0 | 
| Daily Downloads: | 0 | 
| Total Stars: | 0 | 
| Total Watchers: | 1 | 
| Total Forks: | 0 | 
| Total Open Issues: | 0 | 
composer require uraankhayayaal/openapi-generator-lumen
bootstrap/app.php:$app->register(Uraankhayayaal\OpenapiGeneratorLumen\Providers\OpenApiGeneratorProvider::class);
app/Console/Kernel.php file:protected $commands = [
    \Uraankhayayaal\OpenapiGeneratorLumen\Console\Commands\OpenApiGeneratorCommand::class,
];
We have to define request body params and query params for automatically generating OpenAPI.
Uraankhayayaal\OpenapiGeneratorLumen\Http\Requests\BaseRequestQueryData to define Query params like the following example:<?php
namespace App\Http\Requests;
use Uraankhayayaal\OpenapiGeneratorLumen\Http\Requests\BaseRequestQueryData;
final class ConfirmQuery extends BaseRequestQueryData
{
    public string $hash;
    public function rules(): array
    {
        return [
            'hash' => 'required|max:64',
        ];
    }
    public function messages(): array
    {
        return [];
    }
}
Use in controller like the following:
use App\Http\Requests\ConfirmQuery;
...
public function confirm(ConfirmQuery $query): UserResource
{
    ...
    $hash = $query->hash;
    ...
}
Uraankhayayaal\OpenapiGeneratorLumen\Http\Requests\BaseRequestFormData like the following example:<?php
namespace App\Http\Requests;
use OpenApi\Attributes as OA;
use Uraankhayayaal\OpenapiGeneratorLumen\Http\Requests\BaseRequestFormData;
final class RegisterForm extends BaseRequestFormData
{
    public string $username;
    public string $email;
    public string $phone;
    public string $password;
    public bool $isAgreeMarketing;
    public bool $isAgreePolicy;
    #[OA\Property(property: 'file', type: 'string', format: 'binary', nullable: false)] // Use attributes or annotations for override
    public $file,
    public function rules(): array
    {
        return [
            'username' => 'required|max:255',
            'email' => 'required|max:255',
            'phone' => 'required|max:255',
            'password' => 'required',
            'isAgreeMarketing' => 'required|boolean',
            'isAgreePolicy' => 'required|boolean',
            'file' => 'file',
        ];
    }
    public function messages(): array
    {
        return [
            'email.required' => 'Email is required',
        ];
    }
    /**
     * @return \Illuminate\Http\UploadedFile|\Illuminate\Http\UploadedFile[]|array|null
     */
    public function file(): mixed
    {
        return app('request')->file('file');
    }
}
Use in controller like the following:
use App\Http\Requests\RegisterForm;
...
public function register(RegisterForm $registerForm): JsonResource
{
    ...
    $username = $registerForm->username;
    ...
}
Extend your responses from Illuminate\Http\Resources\Json\JsonResource like the following example:
<?php
namespace App\Http\Responses;
use Illuminate\Http\Request;
use Illuminate\Http\Resources\Json\JsonResource;
class UserResource extends JsonResource
{
    /** @param string[] $roles */
    public function __construct(
        public int $id,
        public int $status,
        public string $email,
        public string $phone,
        public array $roles,
        public int $createdAt,
        public int $updatedAt,
    ) {}
    /**
     * Transform the resource into an array.
     *
     * @return array<string, mixed>
     */
    public function toArray(Request $request): array
    {
        return [
            'id' => $this->id,
            'status' => $this->status,
            'email' => $this->email,
            'phone' => $this->phone,
            'roles' => $this->roles,
            'createdAt' => $this->createdAt,
            'updatedAt' => $this->updatedAt,
        ];
    }
}
Use the response in your controller like the following:
use App\Http\Responses\UserResource;
...
public function register(): UserResource
{
    ...
}
And just use:
php artisan openapi:generate
Create a config file in config/openapi-generator.php with content:
<?php
return [
    'title' => 'API DOCUMENTATION',
    'version' => '0.0.1',
    'servers' => [
        'local' => [
            'host' => 'http://localhost:8000',
            'description' => 'Local API server',
        ],
        'prod' => [
            'host' => 'https://example.domain',
            'description' => 'Production API server',
        ],
    ],
    'auth_middleware' => 'auth',
    'export' => [
        'path' => './openapi.json',
        'format' => 'json',
    ],
];
And add the config in bootstrap/app.php for overriding package config values:
$app->configure('openapi-generator');