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
Requires
- php: >=8.1
- illuminate/console: ^10.0|^11.0|^12.0
- illuminate/filesystem: ^10.0|^11.0|^12.0
- illuminate/support: ^10.0|^11.0|^12.0
Requires (Dev)
- orchestra/testbench: ^8.0|^9.0
- phpunit/phpunit: ^10.0
Suggests
- spatie/laravel-medialibrary: For media library support (--with-media)
- spatie/laravel-translatable: For translatable model support (--translatable)
README
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 fieldtext
- TEXT fieldinteger
- INTEGER fieldboolean
- BOOLEAN fielddate
- DATE fieldemail
- VARCHAR with email validationfile
- 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 templatemigration.stub
- Migration templatecontroller.stub
- Web controller templateapi-controller.stub
- API controller templatestore-request.stub
- Store request validationupdate-request.stub
- Update request validationresource.stub
- API resource templateviews/index.blade.stub
- Index view templateviews/create.blade.stub
- Create view templateviews/edit.blade.stub
- Edit view templateviews/show.blade.stub
- Show view templateroutes.stub
- Web routes templateapi-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.