charlesmasinde/api-scaffolder

Generate full API modules (Controller, Requests, Resource, Policy, Routes) from Eloquent models.

Maintainers

Package info

github.com/WMCharles/api-scaffolder

pkg:composer/charlesmasinde/api-scaffolder

Transparency log

Statistics

Installs: 23

Dependents: 0

Suggesters: 0

Stars: 1

Open Issues: 0

v1.2.3 2026-04-05 17:18 UTC

This package is auto-updated.

Last update: 2026-08-02 06:24:52 UTC


README

Generate complete, production-ready API modules from your Eloquent models in seconds.

One command creates a versioned controller (with CRUD + bulk store), form requests with auto-detected validation rules, a resource with smart relationship mapping, a policy, and wired-up routes.

Installation

composer require charlesmasinde/api-scaffolder --dev

The service provider is auto-discovered. No manual registration needed.

Quick Start

# Ensure your model and migration exist first
php artisan make:model Tag -m
php artisan migrate

# Scaffold the full API module (interactive prompt)
php artisan make:api-module Tag

This generates:

  • app/Http/Controllers/Api/V1/TagController.php — index, show, store, update, destroy, bulkStore
  • app/Http/Requests/StoreTagRequest.php — rules parsed from your migration
  • app/Http/Requests/UpdateTagRequest.php — all fields sometimes
  • app/Http/Resources/TagResource.php — columns + parent names + child collections
  • app/Policies/TagPolicy.php — standard policy scaffold
  • routes/api.php — bulk and apiResource routes appended

Usage

Generate everything (no prompts)

php artisan make:api-module Tag --all

Generate specific components only

# Only controller and resource
php artisan make:api-module Tag --only=controller,resource

# Only requests
php artisan make:api-module Tag --only=request

# Multiple --only flags work too
php artisan make:api-module Tag --only=controller --only=request

Valid component names: controller, request, resource, policy, routes

Interactive mode (default)

When you run the command without --all or --only, you get a multi-choice menu:

Which components would you like to generate? (comma-separated numbers, or "all")
  [0] All components
  [1] Controller (CRUD + bulk store)
  [2] Form Requests (Store + Update)
  [3] API Resource
  [4] Policy
  [5] Routes (api.php)

Handling existing files

If a file already exists, you'll be prompted:

TagController already exists. What would you like to do?
  [0] Overwrite
  [1] Skip

To skip all prompts and overwrite everything:

php artisan make:api-module Tag --all --force

Specify API version

php artisan make:api-module Tag V2

Configuration

Publish the config to customize defaults:

php artisan vendor:publish --tag=api-scaffolder-config

This creates config/api-scaffolder.php where you can change:

  • middleware — route middleware (default: auth:sanctum)
  • default_per_page — pagination size (default: 100)
  • skip_columns — columns excluded from resources (default: timestamps)
  • auto_assign_user_id — auto-set user_id from auth (default: true)
  • unique_columns — columns that get unique rules on store
  • request_skip_columns — columns excluded from validation rules

Custom Stubs

Publish stubs to stubs/api-scaffolder/ and modify them:

php artisan vendor:publish --tag=api-scaffolder-stubs

The scaffolder will use your custom stubs over the defaults.

Smart Relationship Detection

The resource generator uses return type hints to detect relationships:

// In your model — type hints are required
public function user(): BelongsTo      // → 'user_name' => $this->user?->name
public function transactions(): HasMany // → 'transactions' => $this->whenLoaded('transactions')

The controller automatically eager-loads all detected relationships.

Requirements

  • PHP 8.2+
  • Laravel 11, 12, or 13
  • Models must have return type hints on relationship methods

License

MIT