mr.incognito/crudify
最新稳定版本:v2.1.0
Composer 安装命令:
composer require mr.incognito/crudify
包简介
This package is for handling the crud for simple crud like for setup etc.
关键字:
README 文档
README
A Laravel package to quickly scaffold API or Web-based CRUD operations using a simple Artisan command. It generates Models, Migrations, Form Requests, API Resources, Controllers, and even Blade views — with full support for validation, foreign keys, nullable fields, and default values.
Installation
To install the package, run:
composer require mr.incognito/crudify
✨ Features
- ✅ Generates Model, Migration, Controller, Request, and Resource
- ✅ Supports Web (with Blade views) or API type generation
- ✅ Handles nullable fields (using
~as a suffix) - ✅ Supports foreign key constraints
- ✅ Adds default values to migration fields
- ✅ Type-aware validation rules (e.g.,
string,integer,boolean) - ✅ Artisan-based generation: fast and developer-friendly
- ✅ --type flag to specific crud type api or web based (with default is api)
- ✅ --exclude flag to skip generating specific files
- ✅ 🆕 delete:crud command to remove all generated files at once
- ✅ Built-in Pest tests
- ✅ Code refactoring via Rector
🚀 Usage
php artisan make:crud ModelName --fields="field:type|rule1|rule2;another:foreign~|constrained:table" --type=api|web --exclude=model,..
Example 1: Basic CRUD without foreign key
php artisan make:crud Department --fields="name:string|max:255;created_by:foreign~|constrained:users"
Example 2: Required foreign key with constraint and cascade
php artisan make:crud Department --fields="name:string;created_by:foreign|constrained:users|onDelete:cascade"
Example 3: Nullable foreign key column
php artisan make:crud Department --fields="name:string;created_by:foreign~|constrained:hospitals"
Example 4: Field with default value
php artisan make:crud Department --fields="name:string;status:boolean~|default:true"
These all will Generate
app/Models/Department.phpapp/Http/Controllers/DepartmentController.phpapp/Http/Requests/DepartmentRequest.phpapp/Http/Resources/DepartmentResource.phpdatabase/migrations/xxxx_xx_xx_create_departments_table.php- Adds route in
routes/api.php
Example 5: Web CRUD with Blade Views
php artisan make:crud Article --fields="title:string;content:text" --type=web
Generates:
- Model, Migration
- Blade Views:
resources/views/articles/*.blade.php Web\ArticleController- Route in
web.php
Example 6: Web CRUD excluding migration and model
php artisan make:crud Article --fields="title:string;content:text" --type=web --exclude=migration,model
Generates only:
- Blade Views:
resources/views/articles/*.blade.php Web\ArticleController- Route in
web.php
Example 7: Exclude Model and Migration (API)
php artisan make:crud Department --fields="name:string" --type=api --exclude=model,migration
Skips model and migration, still creates controller, request, and resource.
🗑️ Deleting Generated CRUD
Use delete:crud to remove all files generated by make:crud for a given resource in one command. It is the exact reverse of make:crud.
php artisan delete:crud ModelName --type=api|web --exclude=model,.. --force
Basic delete (defaults to API type)
php artisan delete:crud Hospital
Specify type
# Delete API CRUD files php artisan delete:crud Hospital --type=api # Delete Web CRUD files php artisan delete:crud Hospital --type=web
Skip confirmation prompt
php artisan delete:crud Hospital --force
Exclude specific components from deletion
Keep certain files while deleting the rest — useful when you want to preserve your model or migration history.
# Keep the model php artisan delete:crud Hospital --exclude=model # Keep the migration (recommended to preserve DB history) php artisan delete:crud Hospital --exclude=migration # Keep both model and migration php artisan delete:crud Hospital --exclude=model,migration # Keep the route entry php artisan delete:crud Hospital --exclude=route # Keep controller and resource php artisan delete:crud Hospital --exclude=controller,resource
Combine options
# Delete web CRUD, skip prompt, keep migration php artisan delete:crud Hospital --type=web --exclude=migration --force # Delete api CRUD, keep model and migration, no prompt php artisan delete:crud Hospital --type=api --exclude=model,migration --force
What gets deleted
| Component | API path | Web path |
|---|---|---|
model |
app/Models/Hospital.php |
app/Models/Hospital.php |
request |
app/Http/Requests/HospitalRequest.php |
app/Http/Requests/HospitalRequest.php |
migration |
database/migrations/*_create_hospitals_table.php |
database/migrations/*_create_hospitals_table.php |
controller |
app/Http/Controllers/Api/HospitalController.php |
app/Http/Controllers/Web/HospitalController.php |
resource |
app/Http/Resources/HospitalResource.php |
— |
views |
— | resources/views/hospitals/ (entire directory) |
route |
Strips entry from routes/api.php |
Strips entry from routes/web.php |
Interactive confirmation
When run without --force, the command shows a preview and asks for confirmation before deleting anything:
The following files will be deleted for <Hospital> (api):
✗ [model] app/Models/Hospital.php
✗ [request] app/Http/Requests/HospitalRequest.php
✗ [migration] database/migrations/2024_01_01_000000_create_hospitals_table.php
✗ [controller] app/Http/Controllers/Api/HospitalController.php
✗ [resource] app/Http/Resources/HospitalResource.php
Are you sure you want to delete these files? (yes/no) [no]:
> yes
Deleted:
✓ [model] app/Models/Hospital.php
✓ [request] app/Http/Requests/HospitalRequest.php
✓ [migration] database/migrations/2024_01_01_000000_create_hospitals_table.php
✓ [controller] app/Http/Controllers/Api/HospitalController.php
✓ [resource] app/Http/Resources/HospitalResource.php
✓ [route] removed route entry from routes/api.php
API CRUD for Hospital deleted successfully.
If a file was not found it is reported as skipped rather than throwing an error:
Not found (skipped):
? [migration] database/migrations/*_create_hospitals_table.php
Field Syntax
Each field uses the format:
column_name:data_type[~]|rules|default:xyz;next_column:foreignId[~]|constrained:table
Supported Field Types
You can use any of the following Laravel migration column types:
string, text, boolean, integer, decimal, date, uuid, json, timestamp, etc.
- Foreign key via
foreign, e.g.,user_id:foreign~|constrained:users - Nullable fields: suffix type with
~, e.g.,email:string~ - Default values:
default:value, e.g.,status:boolean|default:true
Column Modifiers
| Modifier | Description |
|---|---|
~ |
Makes the field nullable |
default:value |
Sets a default value in the migration |
constrained |
Adds a foreign key constraint |
onDelete:CASCADE |
Adds delete behavior for foreign keys |
🆕 New in v2
🎯 --type=api — generates API controller and resource only
🎯 --type=web — generates web controller and Blade views
✂️ --exclude=model,migration,... — skip generating specific components
🗑️ delete:crud — reverse any make:crud with a single command
⚠️ Default Behavior
If --type is not specified, the command defaults to type=api.
php artisan make:crud Book --fields="title:string;author:string"
This is equivalent to:
php artisan make:crud Book --fields="title:string;author:string" --type=api
By default, it generates API-related files:
- API Controller
- API Resource
- Form Request
- Model
- Migration
- Adds route to
api.php
Testing
This package uses Pest for testing:
composer test
Refactoring
This package uses Rector for automated code refactoring and PHP/Laravel upgrades:
composer rector
🛠 Dev Requirements
- PHP ^8.1
- Laravel ^10 or ^11 or ^12 or ^13
- PestPHP for testing
- Laravel Pint for code style
Contributing
Pull requests are welcome. For major changes, please open an issue first to discuss what you would like to change.
Please make sure to update tests as appropriate.
🧑 Author
Sandeep Pant
License
This package is open-sourced software licensed under the MIT License.
统计信息
- 总下载量: 276
- 月度下载量: 0
- 日度下载量: 0
- 收藏数: 1
- 点击次数: 1
- 依赖项目数: 0
- 推荐数: 0
其他信息
- 授权协议: MIT
- 更新时间: 2025-07-10