PHPackages                             mustafafares/laravel-auto-crud - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. [Utility &amp; Helpers](/categories/utility)
4. /
5. mustafafares/laravel-auto-crud

ActiveLibrary[Utility &amp; Helpers](/categories/utility)

mustafafares/laravel-auto-crud
==============================

Laravel Auto CRUD helps you streamline development and save time.

v5.0.1(2mo ago)2391↓28.6%MITPHPPHP &gt;=8.1

Since Nov 26Pushed 2mo agoCompare

[ Source](https://github.com/MustafaFares445/laravel-auto-crud)[ Packagist](https://packagist.org/packages/mustafafares/laravel-auto-crud)[ Fund](https://www.buymeacoffee.com/mrmarchone)[ GitHub Sponsors](https://github.com/mrmarchone)[ RSS](/packages/mustafafares-laravel-auto-crud/feed)WikiDiscussions main Synced 1mo ago

READMEChangelog (9)Dependencies (7)Versions (22)Used By (0)

Laravel Auto CRUD
=================

[](#laravel-auto-crud)

A powerful Laravel package that automatically generates complete CRUD scaffolding including controllers, requests, resources, services, policies, factories, routes, views, and Pest tests for your Eloquent models.

Table of Contents
-----------------

[](#table-of-contents)

- [Installation](#installation)
- [Configuration](#configuration)
- [Basic Usage](#basic-usage)
- [Commands](#commands)
- [Available Options](#available-options)
- [Features](#features)
- [Generated Files](#generated-files)
- [Examples](#examples)
- [License](#license)

Installation
------------

[](#installation)

Install the package via Composer:

```
composer require mustafafares/laravel-auto-crud
```

Publish the configuration file:

```
php artisan vendor:publish --tag=auto-crud-config
```

This will create a `config/laravel_auto_crud.php` file where you can customize package settings.

Publish ResponseMessages translation files:

```
php artisan auto-crud:publish-translations
```

This will publish translation files to `lang/vendor/laravel-auto-crud/` where you can customize the response messages for different languages.

Configuration
-------------

[](#configuration)

After publishing the config file, you can customize the following settings in `config/laravel_auto_crud.php`:

### Default Configuration

[](#default-configuration)

```
return [
    // Fallback path for models (used when --model-path is not specified)
    'fallback_models_path' => 'app/Models/',

    // Response messages for API endpoints
    'response_messages' => [
        'retrieved' => 'data retrieved successfully.',
        'created' => 'data created successfully.',
        'updated' => 'data updated successfully.',
        'deleted' => 'data deleted successfully.',
    ],

    // Permission mappings for policy authorization
    'permission_mappings' => [
        'view' => 'view',
        'create' => 'create',
        'update' => 'edit',
        'delete' => 'delete',
    ],

    // Test generation settings
    'test_settings' => [
        'seeder_class' => 'Database\\Seeders\\RolesAndPermissionsSeeder',
        'include_authorization_tests' => true,
    ],

    // Default pagination per page
    'default_pagination' => 20,

    // Custom stub path (optional)
    'custom_stub_path' => null,

    // Default controller folders
    'default_api_controller_folder' => 'Http/Controllers/API',
    'default_web_controller_folder' => 'Http/Controllers',
];
```

Basic Usage
-----------

[](#basic-usage)

### Interactive Mode

[](#interactive-mode)

Run the command without options to enter interactive mode:

```
php artisan auto-crud:generate
```

This will guide you through:

- Model selection (Searchable)
- Controller type selection (API/Web)
- Controller folder selection (Default or custom path)
- Data pattern selection (Normal/Spatie Data)
- Index method style (Pagination or Get All)
- Feature selection (Service, Policy, Factory, Tests, etc. - Searchable)
- Documentation generation options

**Note**: Most prompts are now searchable. Just start typing to filter options!

### Command Line Mode

[](#command-line-mode)

Generate CRUD for a specific model:

```
php artisan auto-crud:generate --model=User
```

Generate for multiple models:

```
php artisan auto-crud:generate --model=User --model=Post --model=Category
```

Commands
--------

[](#commands)

### `auto-crud:generate`

[](#auto-crudgenerate)

Main command for generating CRUD scaffolding.

**Signature:**

```
php artisan auto-crud:generate
    {--A|all : Generate all files without overwriting existing files}
    {--FA|force-all : Generate all files and overwrite existing files}
    {--M|model=* : Specify model name(s) to generate CRUD for}
    {--MP|model-path= : Custom path to models directory}
    {--T|type=* : Output type: "api", "web", or both}
    {--S|service : Include a Service class for business logic}
    {--F|filter : Include Spatie Query Builder filter support (requires --pattern=spatie-data)}
    {--O|overwrite : Overwrite existing files without confirmation}
    {--P|pattern=normal : Data pattern: "normal" or "spatie-data"}
    {--RM|response-messages : Add ResponseMessages enum for standardized API responses}
    {--NP|no-pagination : Use Model::all() instead of pagination in index method}
    {--PO|policy : Generate Policy class with permission-based authorization}
    {--PS|permissions-seeder : Generate permission seeder and update PermissionGroup enum}
    {--FC|factory : Generate Model Factory}
    {--C|curl : Generate cURL command examples for API endpoints}
    {--PM|postman : Generate Postman collection JSON file}
    {--SA|swagger-api : Generate Swagger/OpenAPI specification}
    {--PT|pest : Generate Pest test files (Feature)}
```

### `auto-crud:generate-tests`

[](#auto-crudgenerate-tests)

Generate Pest tests for existing models without generating CRUD files.

**Signature:**

```
php artisan auto-crud:generate-tests
    {--M|model=* : Specify model name(s) to generate tests for}
    {--MP|model-path= : Custom path to models directory}
    {--O|overwrite : Overwrite existing test files}
```

### `auto-crud:publish-translations`

[](#auto-crudpublish-translations)

Publish ResponseMessages translation files to your application for customization.

**Signature:**

```
php artisan auto-crud:publish-translations
    {--force : Overwrite existing translation files}
```

This command publishes translation files to `lang/vendor/laravel-auto-crud/` where you can customize response messages for different languages.

Module Support (nwidart/laravel-modules)
----------------------------------------

[](#module-support-nwidartlaravel-modules)

Laravel Auto CRUD includes built-in support for generating CRUD operations within [nwidart/laravel-modules](https://github.com/nwidart/laravel-modules) module structure.

### Auto-Detection

[](#auto-detection)

The package automatically detects if your Laravel project uses the nwidart/laravel-modules package and displays module options during interactive generation.

### Using Modules

[](#using-modules)

#### Interactive Mode

[](#interactive-mode-1)

Run the standard command:

```
php artisan auto-crud:generate
```

During the interactive prompts, you'll see an option to select a module or choose "Standard Laravel" for non-module generation.

#### Command-Line Mode

[](#command-line-mode-1)

Specify the module name with the `--module` option:

```
php artisan auto-crud:generate --model=Post --module=Blog
```

Generate for multiple models in a module:

```
php artisan auto-crud:generate --model=Post --model=Category --module=Blog --type=api
```

### Generated File Locations

[](#generated-file-locations)

When generating CRUD for a module, files are created following the nwidart/laravel-modules structure:

- **Controllers**: `Modules/{ModuleName}/Http/Controllers/`
- **Models**: `Modules/{ModuleName}/Models/`
- **Requests**: `Modules/{ModuleName}/Http/Requests/{ModelName}Requests/`
- **Resources**: `Modules/{ModuleName}/Http/Resources/`
- **Services**: `Modules/{ModuleName}/Services/`
- **Policies**: `Modules/{ModuleName}/Policies/`
- **Factories**: `Modules/{ModuleName}/Database/Factories/`
- **Tests**: `Modules/{ModuleName}/Tests/Feature/` and `Modules/{ModuleName}/Tests/Unit/`
- **Routes**: `Modules/{ModuleName}/Routes/api.php` or `Modules/{ModuleName}/Routes/web.php`

### Configuration

[](#configuration-1)

Module settings can be customized in your `config/laravel_auto_crud.php`:

```
'modules' => [
    // Enable/disable module support (auto-detected by default)
    'enabled' => null,

    // Base namespace for modules
    'namespace' => 'Modules',

    // Base path for modules
    'path' => 'Modules',

    // Custom path mappings (optional)
    'custom_paths' => [
        // 'controllers' => 'Http/Controllers',
        // 'models' => 'Models',
        // 'services' => 'Services',
    ],
],
```

### Example

[](#example)

Generate complete CRUD for a Post model in the Blog module:

```
php artisan auto-crud:generate \
  --model=Post \
  --module=Blog \
  --type=api \
  --service \
  --policy \
  --factory \
  --pest \
  --pattern=spatie-data
```

This will create:

- `Modules/Blog/Http/Controllers/PostController.php`
- `Modules/Blog/Models/Post.php` (if not existing)
- `Modules/Blog/Http/Requests/PostRequests/{Store,Update}Request.php`
- `Modules/Blog/Http/Resources/PostResource.php`
- `Modules/Blog/Services/PostService.php`
- `Modules/Blog/Policies/PostPolicy.php`
- `Modules/Blog/Database/Factories/PostFactory.php`
- `Modules/Blog/Tests/Feature/Post/EndpointsTest.php`
- `Modules/Blog/Routes/api.php` (with routes)

And update the `Modules/Blog/Http/Controllers/PostController.php` with all CRUD operations.

Features
--------

[](#features)

### 1. Automatic Media Detection

[](#1-automatic-media-detection)

The package automatically detects if your model uses media traits (`InteractsWithMedia`, `HasMediaConversions`, `HasMedia`) and generates appropriate code for handling media uploads.

### 2. Type Safety with Spatie Data

[](#2-type-safety-with-spatie-data)

When using `--pattern=spatie-data`, the package generates type-safe Data Transfer Objects (DTOs) using Spatie Laravel Data. All properties are nullable by default to support optional values in update endpoints. The generated Data classes include:

- **`syncRelationships()` method**: Automatically syncs `belongsToMany` relationships when provided
- **`HasModelAttributes` trait**: Provides `onlyModelAttributes()` to filter fillable attributes and `syncIfSet()` for conditional relationship syncing

### 3. Transaction Safety

[](#3-transaction-safety)

All store/update operations in Service classes are wrapped in `DB::transaction()` for data integrity. Services automatically handle:

- Media uploads using `MediaHelper` (automatically imported)
- Relationship syncing via `syncRelationships()` method in Data classes
- Model attribute updates using `onlyModelAttributes()` which filters out null values

### 4. Dynamic Permission System

[](#4-dynamic-permission-system)

The package generates policies with dynamic permission resolution. Permission names are resolved using configurable mappings.

#### Permission Seeder Generation

[](#permission-seeder-generation)

When using the `--permissions-seeder` option, the package will:

1. **Generate Individual Permission Seeders**: Creates a seeder file for each model in `Database/Seeders/Permissions/` folder

    - Example: `WorkerPermissionsSeeder.php` for Worker model
    - Generates permissions for: view, create, update, delete actions
    - Uses `PermissionNameResolver` to ensure consistent permission naming
2. **Update PermissionGroup Enum**: Creates or updates `app/Enums/PermissionGroup.php` with a case for the model

    - Example: `case WORKERS = 'workers';`
    - Maintains a single enum with all permission groups
    - Automatically adds new cases when generating seeders for new models

**Example Generated Seeder:**

```
