nabila/crud-generator

A Laravel package to generate full CRUD modules with advanced features

Installs: 1

Dependents: 0

Suggesters: 0

Security: 0

Stars: 1

Watchers: 0

Forks: 0

Open Issues: 0

pkg:composer/nabila/crud-generator

v1.0.0 2025-10-12 12:54 UTC

This package is auto-updated.

Last update: 2025-10-12 20:39:05 UTC


README

CI Packagist Version

A Laravel package that generates complete CRUD modules with optional media library, translatable fields, relationships, and API resources.

Features

  • Complete CRUD Generation: Models, Migrations, Controllers, Requests, Views, Routes
  • API Support: Generate API controllers and resources instead of web interfaces
  • Media Library: Integration with Spatie Media Library for file uploads
  • Translatable Fields: Support for Spatie Translatable package
  • Relationships: Automatic relationship generation
  • Form Validation: Automatic request validation classes
  • Bootstrap Views: Ready-to-use Bootstrap-styled views
  • Customizable: Publishable stubs and configuration

Installation

Install the package via Composer:

composer require nabila/crud-generator

The package will automatically register its service provider.

Optional Dependencies

For additional features, install these packages:

# For media library support
composer require spatie/laravel-medialibrary

# For translatable models
composer require spatie/laravel-translatable

Usage

Basic Usage

Generate a complete CRUD module:

php artisan crud:make Post --fields="title:string,content:text,published:boolean"

This generates:

  • app/Models/Post.php
  • database/migrations/create_posts_table.php
  • app/Http/Controllers/PostController.php
  • app/Http/Requests/Post/StorePostRequest.php
  • app/Http/Requests/Post/UpdatePostRequest.php
  • resources/views/posts/ (index, create, edit, show)
  • Route definitions in routes/web_generated.php

Advanced Features

With Media Library Support

php artisan crud:make Product --fields="name:string,description:text,image:file,price:integer" --with-media

Translatable Fields

php artisan crud:make Article --fields="title:string,content:text,slug:string" --translatable

With Relationships

php artisan crud:make Post --fields="title:string,content:text" --relationships="belongsTo:User,hasMany:Comment"

API Generation

php artisan crud:make Product --fields="name:string,price:integer" --api

This generates API controllers and resources instead of web views.

Complex Example

php artisan crud:make BlogPost --fields="title:string,slug:string,content:text,excerpt:text:nullable,featured_image:file,published:boolean,published_at:date:nullable" --with-media --translatable --relationships="belongsTo:User,belongsTo:Category,hasMany:Comment" --force

Available Field Types

  • string - VARCHAR field
  • text - TEXT field
  • integer - INTEGER field
  • boolean - BOOLEAN field
  • date - DATE field
  • email - VARCHAR with email validation
  • file - File upload field (works with --with-media)

Add :nullable to make fields optional:

--fields="name:string,description:text:nullable,age:integer:nullable"

Command Options

Option Description
--fields Required. Comma-separated fields with types
--with-media Include Spatie Media Library support
--translatable Make model translatable
--relationships Add relationships (belongsTo:Model,hasMany:Model)
--api Generate API routes and controller
--force Overwrite existing files

List Available Commands

php artisan crud:list

Generated Files Structure

For Web CRUD:

app/
├── Models/Post.php
└── Http/
    ├── Controllers/PostController.php
    └── Requests/Post/
        ├── StorePostRequest.php
        └── UpdatePostRequest.php

database/migrations/
└── 2024_01_01_000000_create_posts_table.php

resources/views/posts/
├── index.blade.php
├── create.blade.php
├── edit.blade.php
└── show.blade.php

routes/
└── web_generated.php

For API CRUD:

app/
├── Models/Post.php
└── Http/
    ├── Controllers/Api/PostController.php
    ├── Resources/PostResource.php
    └── Requests/Post/
        ├── StorePostRequest.php
        └── UpdatePostRequest.php

routes/
└── api_generated.php

Configuration

Publish the configuration file:

php artisan vendor:publish --tag=nabila-crud-config

Publish the stubs for customization:

php artisan vendor:publish --tag=nabila-crud-stubs

Customization

After publishing stubs, you can customize the templates in stubs/nabila-crud/. The generator will use your custom stubs if they exist.

Available Stubs

  • model.stub - Model template
  • migration.stub - Migration template
  • controller.stub - Web controller template
  • api-controller.stub - API controller template
  • store-request.stub - Store request validation
  • update-request.stub - Update request validation
  • resource.stub - API resource template
  • views/index.blade.stub - Index view template
  • views/create.blade.stub - Create view template
  • views/edit.blade.stub - Edit view template
  • views/show.blade.stub - Show view template
  • routes.stub - Web routes template
  • api-routes.stub - API routes template

Integration

Register Generated Routes

Add to your routes/web.php:

if (file_exists(__DIR__ . '/web_generated.php')) {
    require __DIR__ . '/web_generated.php';
}

Add to your routes/api.php:

if (file_exists(__DIR__ . '/api_generated.php')) {
    require __DIR__ . '/api_generated.php';
}

Run Migrations

After generating your CRUD:

php artisan migrate

Requirements

  • PHP 8.1+
  • Laravel 10.0+, 11.x or 12.x

License

This package is open-sourced software licensed under the MIT license.

Contributing

Please see CONTRIBUTING.md for details.

Changelog

Please see CHANGELOG.md for more information on what has changed recently.

Credits

Support

If you discover any security related issues, please email nabilashabban2000@gmail.com instead of using the issue tracker.