nahid-ferdous / laravel-module-generator
Speeds up Laravel development by automating repetitive tasks. This package helps to generate module files (service, controller, model, migration, resource, request, collection) from YAML file.
Installs: 2 542
Dependents: 0
Suggesters: 0
Security: 0
Stars: 2
Watchers: 0
Forks: 0
Open Issues: 1
pkg:composer/nahid-ferdous/laravel-module-generator
Requires
- php: >=8.1
- illuminate/support: ^10.0|^11.0|^12.0
- symfony/yaml: ^6.0 || ^7.0
Suggests
- spatie/laravel-permission: Allows to generate permission controller, model, migration, resource, request, collection
- dev-main
- v2.x-dev
- 1.3.x-dev
- 1.3.6
- 1.3.5
- 1.3.4
- 1.3.3
- 1.3.2
- 1.3.1
- 1.3.00
- 1.2.x-dev
- 1.2.78
- 1.2.76
- 1.2.75
- 1.2.74
- 1.2.73
- 1.2.72
- 1.2.71
- 1.2.70
- 1.2.69
- 1.2.68
- 1.2.67
- 1.2.66
- 1.2.65
- 1.2.64
- 1.2.63
- 1.2.62
- 1.2.61
- 1.2.60
- 1.2.59
- 1.2.58
- 1.2.57
- 1.2.56
- 1.2.55
- 1.2.54
- 1.2.53
- 1.2.52
- 1.2.51
- 1.2.50
- 1.2.48
- 1.2.47
- 1.2.46
- 1.2.45
- 1.2.44
- 1.2.43
- 1.2.42
- 1.2.41
- 1.2.40
- 1.2.39
- 1.2.38
- 1.2.37
- 1.2.36
- 1.2.35
- 1.2.34
- 1.2.33
- 1.2.32
- 1.2.31
- 1.2.30
- 1.2.29
- 1.2.28
- 1.2.27
- 1.2.26
- 1.2.25
- 1.2.24
- 1.2.23
- 1.2.22
- 1.2.21
- 1.2.20
- 1.2.19
- 1.2.18
- 1.2.17
- 1.2.16
- 1.2.15
- 1.2.14
- 1.2.13
- 1.2.12
- 1.2.11
- 1.2.10
- 1.2.9
- 1.2.8
- 1.2.7
- 1.2.6
- 1.2.4
- 1.2.3
- 1.2.2
- 1.2.1
- 1.2.0
- 1.1.42
- 1.1.41
- 1.1.40
- 1.1.39
- 1.1.38
- 1.1.36
- 1.1.35
- 1.1.34
- 1.1.33
- 1.1.32
- 1.1.31
- 1.1.30
- 1.1.29
- 1.1.28
- 1.1.27
- 1.1.26
- 1.1.25
- 1.1.24
- 1.1.23
- 1.1.22
- 1.1.21
- 1.1.19
- 1.1.18
- 1.1.17
- 1.1.16
- 1.1.15
- 1.1.14
- 1.1.12
- 1.1.11
- 1.1.10
- 1.1.9
- 1.1.8
- 1.1.7
- 1.1.4
- 1.1.3
- 1.1.2
- 1.1.1
- 1.1.0
- 1.0.40
- 1.0.39
- 1.0.36
- 1.0.35
- 1.0.34
- 1.0.33
- 1.0.32
- 1.0.31
- 1.0.30
- 1.0.28
- 1.0.27
- 1.0.26
- 1.0.25
- 1.0.24
- 1.0.23
- 1.0.22
- 1.0.21
- 1.0.20
- 1.0.19
- 1.0.18
- 1.0.17
- 1.0.16
- 1.0.15
- 1.0.14
- 1.0.13
- 1.0.12
- 1.0.11
- 1.0.10
- 1.0.9
- 1.0.8
- 1.0.7
- 1.0.6
- 1.0.5
- 1.0.4
- 1.0.3
- 1.0.2
- 1.0.1
- dev-1.3-backupfiles
- dev-07-jan-2026-before-improvements-relation-service-controller
- dev-main-before-Backup-cleanup
- dev-main-with-comments
- dev-main-backup-migration-issue
This package is auto-updated.
Last update: 2026-01-30 21:48:07 UTC
README
📖 Introduction
A developer-friendly Laravel package to generate complete modules (Model, Migration, Controller, Service, Resource, Collection, Form Request, and Routes) from a single YAML configuration file. Now includes Authentication (Sanctum & Passport) & User Management, Postman collection generation, and DB diagram export for streamlined API development and documentation.
✨ Features
- Generate full Laravel modules from YAML configuration
- 🆕 Built-in Authentication & User Management
- 🆕 Roles & Permissions Management (Spatie Integration)
- Customizable stub support (with fallback to internal defaults)
- Postman collection generation for instant API testing
- Database diagram export compatible with dbdiagram.io
- Generates:
- Models with relationships
- Database migrations
- API Controllers
- Service classes
- Form Request validation
- API Resources & Collections
- Route entries
- Authentication System
- User Management System
- Roles & Permissions System
- Postman collection files
- DB diagram files (.dbml)
- Smart fillable and relationship handling
- Designed for rapid development and prototyping
🚀 Installation
Install the package via Composer:
composer require nahid-ferdous/laravel-module-generator --dev
Setup
Generate required files and configurations:
php artisan module-generator:install
Or force install if you've already executed the command:
php artisan module-generator:install --force
What Gets Generated
- Useful Traits →
app/Traits/ - Global Exception Handler →
app/Exceptions/ExceptionHandler.php - Helper Functions →
app/Helpers/ - Middleware (CORS & Auth) →
app/Http/Middleware/ - Configuration →
module/modules.yaml
Optional: Publish Config & Stubs
Customize the package defaults by publishing configuration and stubs:
# Publish configuration php artisan vendor:publish --tag=module-generator-config # Publish stubs for customization php artisan vendor:publish --tag=module-generator-stubs
This creates:
config/module-generator.phpmodule/stub/directory
🔐 Authentication & User Management
Prerequisites: Configure your
.envDB connection before generating the authentication module.
Generate Auth System
Create a complete authentication system with a single command:
php artisan auth:generate
Available Options:
php artisan auth:generate --force # Overwrite existing files php artisan auth:generate --skip-roles # Skip roles & permissions php artisan auth:generate --skip-email-verification # Skip email verification php artisan auth:generate --with-social-login # Include social auth
What Gets Generated
Authentication Files:
- AuthController & AuthService
- Login, Register, Password Reset Requests
- Email Verification (optional)
- Auth Routes
User Management Files:
- UserController & UserService
- User Requests, Resources & Collections
Roles & Permissions (optional):
- RoleController & PermissionController
- Role & Permission Services
- Spatie Laravel Permissions (auto-installed)
- Permission & User Seeders
Social Authentication (optional):
- SocialAuthController
- Laravel Socialite (auto-installed)
API Endpoints
Authentication:
POST /api/register # Register new user
POST /api/login # Login user
POST /api/logout # Logout user
POST /api/password/forgot # Send reset link
POST /api/password/reset # Reset password
GET /api/profile # Get user profile
PUT /api/profile # Update profile
POST /api/email/verify # Verify email (optional)
POST /api/email/resend-verification-link # Resend verification (optional)
User Management:
GET /api/users # List all users
POST /api/users # Create user
GET /api/users/{id} # Get user details
PUT /api/users/{id} # Update user
DELETE /api/users/{id} # Delete user
Roles & Permissions:
GET /api/roles # List roles
POST /api/roles # Create role
GET /api/roles/{id} # Get role
PUT /api/roles/{id} # Update role
DELETE /api/roles/{id} # Delete role
GET /api/permissions # List permissions
POST /api/permissions # Create permission
GET /api/permissions/{id} # Get permission
PUT /api/permissions/{id} # Update permission
DELETE /api/permissions/{id} # Delete permission
POST /api/assign-permission-to-role # Assign permissions to role
POST /api/assign-permission-to-user # Assign permissions to user
Social Authentication:
GET /api/auth/social/{provider} # Redirect to provider
GET /api/auth/social/{provider}/callback # Handle callback
Setup Instructions
1. Choose Authentication Guard (Sanctum or Passport)
Sanctum (Recommended for Single-Page Apps):
composer require laravel/sanctum
php artisan vendor:publish --provider="Laravel\Sanctum\SanctumServiceProvider"
php artisan migrate
Update bootstrap/app.php:
->withMiddleware(function (Middleware $middleware): void { $middleware->statefulApi(); })
Passport (For Third-Party Clients):
composer require laravel/passport php artisan vendor:publish --tag=passport-migrations php artisan vendor:publish --tag=passport-config php artisan migrate php artisan passport:client --personal
2. Update User Model
For Sanctum:
use Laravel\Sanctum\HasApiTokens; class User extends Authenticatable { use HasApiTokens, HasFactory, Notifiable; }
For Passport:
use Laravel\Passport\HasApiTokens; class User extends Authenticatable { use HasApiTokens, HasFactory, Notifiable; }
For Roles & Permissions:
use Spatie\Permission\Traits\HasRoles; class User extends Authenticatable { use HasRoles, HasFactory, Notifiable; }
3. Update Configuration Files
.env:
AUTH_GUARD='api' FRONTEND_URL=http://localhost:5173 MAIL_MAILER=smtp MAIL_HOST=smtp.mailtrap.io MAIL_PORT=2525 MAIL_USERNAME=your_username MAIL_PASSWORD=your_password MAIL_ENCRYPTION=tls MAIL_FROM_ADDRESS=noreply@yourapp.com MAIL_FROM_NAME="${APP_NAME}"
config/auth.php:
'guards' => [ 'api' => [ 'driver' => 'sanctum', // or 'passport' 'provider' => 'users', 'hash' => false, ], ],
4. Register Routes
Update routes/api.php:
require __DIR__.'/api/auth.php'; // Authentication routes require __DIR__.'/api/access-control.php'; // Roles & permissions (if generated) require __DIR__.'/api/social-auth.php'; // Social auth (if generated)
5. Configure Social Providers (Optional)
Update config/services.php:
'google' => [ 'client_id' => env('GOOGLE_CLIENT_ID'), 'client_secret' => env('GOOGLE_CLIENT_SECRET'), 'redirect' => env('GOOGLE_CALLBACK_URL'), ], 'facebook' => [ 'client_id' => env('FACEBOOK_CLIENT_ID'), 'client_secret' => env('FACEBOOK_CLIENT_SECRET'), 'redirect' => env('FACEBOOK_CALLBACK_URL'), ], 'github' => [ 'client_id' => env('GITHUB_CLIENT_ID'), 'client_secret' => env('GITHUB_CLIENT_SECRET'), 'redirect' => env('GITHUB_CALLBACK_URL'), ],
6. Seed Initial Data
database/seeders/DatabaseSeeder.php:
public function run() { $this->call([ PermissionSeeder::class, UserTableSeeder::class, ]); }
Run:
php artisan migrate php artisan db:seed
🛠️ Module Generation from YAML
Quick Start
Generate a complete module set (Model, Migration, Controller, Service, Resource, Collection, Form Request, Routes) from a single YAML file.
php artisan module:generate
Default YAML location: module/models.yaml
Use custom file:
php artisan module:generate --file=custom/path/models.yaml
YAML Configuration Guide
Minimal Example
Product: fields: name: string:unique code: string:unique description: text:nullable is_active: boolean:default true relations: belongsTo: User:creator
Complete Example
User: generate_only: seeder fields: name: string email: string:unique email_verified_at: dateTime:nullable password: string avatar: image:nullable status: boolean:default true last_login_at: timestamp:nullable Category: generate_except: seeder fields: name: string:unique slug: string:unique description: text:nullable image: image:nullable parent_id: foreignId:categories:nullable is_active: boolean:default true display_order: integer:default 0 seo_title: string:nullable seo_description: string:nullable seo_keywords: string:nullable created_by: foreignId:users:nullable updated_by: foreignId:users:nullable relations: belongsTo: Category:parent, User:creator, User:updater hasMany: Category:children, Product:products nested_requests: children Product: generate: all fields: vendor_id: foreignId:vendors:nullable category_id: foreignId:categories brand_id: foreignId:brands:nullable name: string slug: string:unique sku: string:unique description: text:nullable short_description: string:nullable price: double:default 0 cost_price: double:default 0 compare_price: double:default 0 quantity: integer:default 0 is_active: boolean:default true is_featured: boolean:default false rating: double:default 0 total_reviews: integer:default 0 weight: double:nullable dimensions: string:nullable seo_title: string:nullable seo_description: string:nullable seo_keywords: string:nullable meta_data: json:nullable created_by: foreignId:users:nullable updated_by: foreignId:users:nullable deleted_at: dateTime:nullable relations: belongsTo: Vendor, Category, Brand, User:creator, User:updater hasMany: Review, ProductVariant:variants, ProductImage:images belongsToMany: ProductAttribute nested_requests: variants, images ProductImage: generate_only: model, migration, seeder, service fields: product_id: foreignId:products image_url: image alt_text: string:nullable display_order: integer:default 0 is_thumbnail: boolean:default false created_by: foreignId:users:nullable updated_by: foreignId:users:nullable relations: belongsTo: Product, User:creator, User:updater ProductVariant: generate: all fields: product_id: foreignId:products sku: string:unique name: string price: double:nullable cost_price: double:nullable quantity: integer:default 0 attributes_data: json:nullable image_id: foreignId:product_images:nullable is_active: boolean:default true created_by: foreignId:users:nullable updated_by: foreignId:users:nullable relations: belongsTo: Product, ProductImage:image, User:creator, User:updater ProductAttributeValue: generate: all fields: attribute_id: foreignId:product_attributes value: string slug: string display_order: integer:default 0 created_by: foreignId:users:nullable updated_by: foreignId:users:nullable relations: belongsTo: ProductAttribute:attribute, User:creator, User:updater unique: - [product_attribute_id, value]
Generation Commands
Main Command: module:generate
Generate complete API modules from YAML schema.
Signature:
php artisan module:generate
{--file= : Path to YAML file (default: module/models.yaml)}
{--force : Overwrite files without prompting}
{--skip-backup : Skip creating backups}
{--skip-postman : Skip Postman collection}
{--skip-dbdiagram : Skip DB diagram}
{--postman-base-url= : Base URL for Postman}
{--postman-prefix= : API prefix for Postman}
Examples:
# Generate with defaults php artisan module:generate # Force overwrite existing files php artisan module:generate --force # Custom file and Postman settings php artisan module:generate \ --file=schemas/products.yaml \ --postman-base-url=https://api.myapp.com \ --postman-prefix=api/v2 # Skip Postman and DBML generation php artisan module:generate --skip-postman --skip-dbdiagram
Database Diagram: dbdiagram:generate
Export your YAML schema as DBML for visualization.
Signature:
php artisan dbdiagram:generate
{--file= : Path to YAML file}
{--output= : Output DBML file path}
Examples:
# Generate with defaults php artisan dbdiagram:generate # Custom output location php artisan dbdiagram:generate --output=docs/schema.dbml
Use dbdiagram.io to visualize and export diagrams.
Postman Collection: postman:generate
Generate a Postman collection for API testing.
Signature:
php artisan postman:generate
{--file= : Path to YAML file}
{--base-url= : Base URL for API}
{--prefix= : API prefix}
{--output= : Output file path}
Examples:
# Generate with defaults php artisan postman:generate # Custom base URL and prefix php artisan postman:generate \ --base-url=https://api.myapp.com \ --prefix=api/v2
DBML to YAML: dbdiagram:import
Convert existing DBML files to YAML format.
Signature:
php artisan dbdiagram:import
{--file= : Input DBML file}
{--output= : Output YAML file}
Workflow:
- Design schema at dbdiagram.io
- Export DBML
- Save to
.dbmlfile - Run import command
- Review and use generated YAML
Rollback: module:rollback
Restore to a previous generation state using automatic backups.
Signature:
php artisan module:rollback
{--backup= : Specific backup timestamp}
{--list : List available backups}
{--cleanup : Remove old backups}
Examples:
# List available backups php artisan module:rollback --list # Rollback to most recent backup php artisan module:rollback # Rollback to specific backup php artisan module:rollback --backup=2024-01-15_143022 # Clean up old backups php artisan module:rollback --cleanup
YAML Field Types & Modifiers
Supported Types:
- String:
string,text,longText - Numeric:
integer,bigInteger,double,float,decimal - Boolean:
boolean - Date/Time:
date,dateTime,timestamp,time - Files:
image,file(auto-handles uploads) - JSON:
json - Enum:
enum - Foreign Keys:
foreignId:table_name - Soft Deletes:
deleted_at: dateTime:nullable
Common Modifiers:
nullable— Column can be nullunique— Add unique constraintdefault <value>— Set default value
Field Examples:
fields: name: string email: string:unique description: text:nullable avatar: image:nullable is_active: boolean:default true price: double:default 0 user_id: foreignId:users parent_id: foreignId:categories:nullable published_at: dateTime:nullable deleted_at: dateTime:nullable meta_data: json:nullable slug: string:unique:nullable
Relationships
Format: relationType: Model:functionName, Model:functionName
Supported Types:
belongsTo— Many-to-onehasMany— One-to-manyhasOne— One-to-onebelongsToMany— Many-to-many
Examples:
relations: belongsTo: User:creator, User:updater, Category:parent hasMany: Category:children, Product:products hasOne: Profile belongsToMany: Tag, Category
Special Mapping:
creator→created_byfieldupdater→updated_byfieldparent→parent_idfield
Generation Control
Control Options:
generate: all— Generate all componentsgenerate_only: model, migration— Only these componentsgenerate_except: seeder— All except thesenested_requests: variants, images— Include in Postman bodies
Valid Components:
model, migration, controller, service, request, resource, collection, seeder
Compound Unique Constraints:
ProductAttribute: fields: product_id: foreignId:products attribute_id: foreignId:attributes unique: - [product_id, attribute_id]
Output Locations
- Models:
app/Models/ - Migrations:
database/migrations/ - Controllers:
app/Http/Controllers/ - Services:
app/Services/ - Requests:
app/Http/Requests/ - Resources:
app/Http/Resources/ - Collections:
app/Http/Resources/ - Seeders:
database/seeders/ - Routes: Appended to
routes/api.php - Postman:
module/postman_collection.json - DBML:
module/dbdiagram.dbml - Backups:
module/backups/{timestamp}/
Troubleshooting
Auth Module Conflicts:
If you ran auth:generate previously, set User.generate_only: seeder in YAML to avoid overwriting custom auth code.
Migration Issues: Use new migrations to alter existing tables rather than editing previously-applied migrations.
Foreign Key Naming:
Ensure foreignId:table values match your actual table names.
File Uploads:
Models with image or file fields automatically generate form-data Postman requests.
Version Control:
Keep your YAML schema in Git and use branches before running --force to make rollbacks easier.
🚀 Complete Workflow
From installation to production-ready API:
1. Generate Authentication (Optional)
php artisan auth:generate
2. Create YAML Schema
Create or edit module/models.yaml with your models and fields.
3. Review Generated Files
php artisan module:generate
Review output before running --force.
4. Apply Migrations
php artisan migrate
5. Test with Postman
Import module/postman_collection.json into Postman and test endpoints.
6. Visualize Database
Copy DBML output to dbdiagram.io for visualization.
7. Local Testing
php artisan serve
8. Deploy
Commit changes and deploy:
git add . git commit -m "Generate API modules from YAML" git push origin feature/api-modules
Following this workflow will help you safely move from YAML schemas to fully-functional API endpoints.
✨ Features Summary
- ✅ Generate complete Laravel modules from YAML
- ✅ Authentication & User Management (Sanctum & Passport)
- ✅ Roles & Permissions (Spatie Integration)
- ✅ Social Authentication (OAuth)
- ✅ Postman collection generation
- ✅ Database diagram export (DBML)
- ✅ Automatic backups & rollback support
- ✅ Customizable stubs
- ✅ Smart fillable and relationship handling
- ✅ File upload handling for image/file fields
🚀 Roadmap
- GUI for YAML configuration
- OpenAPI/Swagger documentation generation
- Insomnia collection export
- GraphQL schema generation
- Two-Factor Authentication (2FA)
- Additional relationship types
📝 Recent Updates
v1.3.00
- ✅ IMPROVED: YAML file structure and options
- ✅ NEW: Database to Models YAML conversion
v1.2.50
- ✅ NEW: Passport support added
- ✅ IMPROVED: Better error handling and user feedback
v1.2.0
- ✅ NEW: Authentication system generation
- ✅ NEW: User management system
- ✅ NEW: Roles & Permissions with Spatie integration
v1.0.10
- ✅ NEW: Postman collection generation
- ✅ NEW: Database diagram export
- ✅ NEW: Selective component generation
Happy generating! 🎉