PHP code example of ashique-ar / laravel-crud-generator

1. Go to this page and download the library: Download ashique-ar/laravel-crud-generator library. Choose the download type require.

2. Extract the ZIP file and open the index.php.

3. Add this code to the index.php.
    
        
<?php
require_once('vendor/autoload.php');

/* Start to develop here. Best regards https://php-download.com/ */

    

ashique-ar / laravel-crud-generator example snippets




return [
    // ... other configuration sections ...
    
    'resources' => [
        'vehicles' => [
            'model' => App\Models\Vehicle::class,
            'middleware' => ['auth:sanctum', 'crud.permissions'],
            'fillable' => ['name', 'make_id', 'model_id', 'year', 'color', 'vin'],
            'hidden' => ['internal_notes', 'cost_price'],
            'rules' => [
                'store' => [
                    'name' => '          'pagination' => [
                'per_page' => 15,
                'max_per_page' => 100,
            ],
            'searchable_fields' => ['name'],
            'sortable_fields' => ['id', 'name', 'created_at', 'updated_at'],
            'filterable_fields' => ['make_id', 'model_id'],
            'relationships' => [
                'make_id' => [
                    'entity' => 'vehicle-makes',
                    'labelField' => 'name',
                    'valueField' => 'id',
                    'displayField' => 'name',
                    'searchable' => true,
                    '

use AshiqueAr\LaravelCrudGenerator\Facades\CrudGenerator;

// Register all CRUD routes with middleware
CrudGenerator::registerRoutes('api/v1', ['auth:sanctum']);

// Or register specific resources
CrudGenerator::registerRoutes('api/v1', ['auth:sanctum'], ['users', 'posts']);

'relationships' => [
    'field_name' => [
        'entity' => 'target-entity-name',        // Kebab-case entity name
        'labelField' => 'name',                  // Field to display as label
        'valueField' => 'id',                    // Field to use as value
        'displayField' => 'name',                // Field to show in tables/lists
        'searchable' => true,                    // Enable search in dropdown
        '

'vehicles' => [
    'model' => App\Models\Vehicle::class,
    'fillable' => ['name', 'class_id', 'make_id', 'model_id', 'year', 'color', 'vin'],
    'hidden' => ['internal_notes', 'cost_price'],
    'relationships' => [
        'class_id' => [
            'entity' => 'vehicle-classes',
            'labelField' => 'name',
            'valueField' => 'id',
            'displayField' => 'name',
            'searchable' => true,
            '     'searchable' => true,
            '

'posts' => [
    'model' => App\Models\Post::class,
    'fillable' => ['title', 'content', 'category_id', 'slug', 'excerpt', 'featured_image'],
    'hidden' => ['internal_notes', 'admin_notes'],
    'relationships' => [
        'category_id' => [
            'entity' => 'categories',
            'labelField' => 'name',
            'valueField' => 'id',
            'displayField' => 'name',
            'searchable' => true,
            '

return [
    'api' => [
        'pagination' => [
            'enabled' => true,
            'per_page' => 15,
            'max_per_page' => 100,
        ],
        'prefix' => 'api/crud',
        'documentation' => [
            'enabled' => true,
            'title' => 'CRUD API Documentation',
            'version' => '1.0.0',
        ],
    ],
    
    'permissions' => [
        'enabled' => true,
        'guard' => 'web',
        'format' => '{action}-{resource}', // view-users, create-posts, etc.
        'actions' => ['view', 'create', 'edit', 'delete'],
        'super_admin_role' => 'super-admin',
    ],
    
    'search' => [
        'default_operator' => 'like',
        'case_sensitive' => false,
        'operators' => [
            'like' => 'LIKE',
            'exact' => '=',
            'not_equal' => '!=',
            'greater_than' => '>',
            'less_than' => '<',
            // ... more operators
        ],
    ],
    
    'resources' => [
        // Your resource definitions
    ],
    
    'add_new_resource_to' => 'bottom', // or 'top'
];

'resource-name' => [
    // Core settings
    'model' => App\Models\ResourceModel::class,
    'middleware' => ['auth:sanctum', 'crud.permissions'],
    
    'fillable' => [...],
    'hidden' => [...],
    // Validation rules
    'rules' => [
        'store' => [...],
        'update' => [...],
    ],
    
    // Pagination settings
    'pagination' => [
        'per_page' => 15,
        'max_per_page' => 100,
    ],
    
    // Search configuration
    'searchable_fields' => ['name', 'email'],
    
    // Sorting configuration
    'sortable_fields' => ['id', 'name', 'created_at', 'updated_at'],
    
    // Filtering configuration
    'filterable_fields' => ['status', 'category_id'],
    
    // Relationships for dynamic forms and Eloquent relationships
    'relationships' => [
        'category_id' => [
            'entity' => 'categories',
            'labelField' => 'name',
            'valueField' => 'id',
            'displayField' => 'name',
            'searchable' => true,
            '

// Configuration examples for different model locations
'resources' => [
    // Simple model in App\Models
    'users' => [
        'model' => App\Models\User::class,
        // ... other config
    ],
    
    // Model in subfolder
    'profiles' => [
        'model' => App\Models\User\Profile::class,
        // ... other config
    ],
    
    // Model in admin subfolder
    'admin-users' => [
        'model' => App\Models\Admin\User::class,
        // ... other config
    ],
    
    // Model in completely different namespace
    'products' => [
        'model' => Modules\Catalog\Models\Product::class,
        // ... other config
    ]
]



namespace App\Services\Crud;

use AshiqueAr\LaravelCrudGenerator\Services\Crud\BaseCrudLogic;
use App\Models\User;

class UserLogic extends BaseCrudLogic
{
    protected string $modelClass = User::class;
    
    public function beforeCreate(array $data, Request $request): array
    {
        // Add custom logic before creating
        $data['created_by'] = auth()->id();
        return $data;
    }
    
    public function afterCreate(Model $user, Request $request): void
    {
        // Send welcome email
        Mail::to($user)->send(new WelcomeEmail($user));
    }
    
    // Override other methods as needed
}

'users' => [
    'model' => App\Models\User::class,
    'logic' => App\Services\Crud\UserLogic::class,
    'fillable' => ['name', 'email', 'phone'],
    'hidden' => ['password'],
    'rules' => [
        'store' => [
            'name' => 'her configuration
]



return [
    // API defaults applied to all resources
    'api' => [
        'pagination' => [
            'enabled' => true,
            'per_page' => 15,
            'max_per_page' => 100,
        ],
        'documentation' => [
            'enabled' => true,
            'title' => 'CRUD API Documentation',
            'version' => '1.0.0',
        ],
        'response' => [
            're' => [
        // 'auth:api',
        // 'throttle:60,1',
    ],

    // Search configuration defaults
    'search' => [
        'default_operator' => 'like',
        'case_sensitive' => false,
        'operators' => [
            'like' => 'LIKE',
            'exact' => '=',
            'not_equal' => '!=',
            'greater_than' => '>',
            'less_than' => '<',
            'greater_equal' => '>=',
            'less_equal' => '<=',
            'in' => 'IN',
            'not_in' => 'NOT IN',
            'between' => 'BETWEEN',
            'starts_with' => 'LIKE',
            'ends_with' => 'LIKE',
        ],
    ],

    // Resource definitions
    'resources' => [
        // Your resource configurations here
    ],

    // Where to add new resources when using make:crud-resource command
    'add_new_resource_to' => 'bottom', // 'top' or 'bottom'
];



namespace Tests\Feature;

use Tests\TestCase;
use App\Models\User;

class UserCrudTest extends TestCase
{
    public function test_can_list_users()
    {
        $users = User::factory()->count(5)->create();
        
        $response = $this->get('/api/v1/users');
        
        $response->assertStatus(200)
                ->assertJsonStructure([
                    'data' => [
                        '*' => ['id', 'name', 'email', 'created_at', 'updated_at']
                    ],
                    'meta' => ['current_page', 'total', 'per_page']
                ]);
    }

    public function test_can_create_user()
    {
        $userData = [
            'name' => 'John Doe',
            'email' => '[email protected]'
        ];

        $response = $this->post('/api/v1/users', $userData);

        $response->assertStatus(201)
                ->assertJson(['data' => $userData]);
                
        $this->assertDatabaseHas('users', $userData);
    }
}

// Applied automatically to all CRUD routes
'middleware' => ['auth:sanctum', 'crud.permissions']

'rules' => [
    'store' => [
        'name' => 'email',
    ],
    'update' => [
        'name' => 'sometimes|string|max:255',
        'email' => 'sometimes|email|unique:users,email,{{id}}',
    ]
]

'resources' => [
    'categories' => [
        'model' => App\Models\Category::class,
        'fillable' => ['name', 'slug', 'description'],
        'hidden' => ['internal_notes'],
        'rules' => [
            'store' => ['name' => '' => [
        'model' => App\Models\Post::class,
        'fillable' => ['title', 'content', 'category_id', 'status', 'slug', 'excerpt', 'featured_image'],
        'hidden' => ['internal_notes', 'admin_notes'],
        'rules' => [
            'store' => [
                'title' => 'hable_fields' => ['title', 'content'],
        'sortable_fields' => ['id', 'title', 'created_at', 'updated_at'],
        'filterable_fields' => ['status', 'category_id'],
        'relationships' => [
            'category_id' => [
                'entity' => 'categories',
                'labelField' => 'name',
                'valueField' => 'id',
                'displayField' => 'name',
                'searchable' => true,
                '

'resource_name' => [
    // Required: The Eloquent model class
    'model' => App\Models\YourModel::class,
    
    // Optional: Database table name (auto-detected if not provided)
    'table' => 'your_table',
    
    // Optional: Custom logic class for business logic
    'logic' => App\Services\Crud\YourModelLogic::class,
    
    // Mass assignment protection - fields that can be filled
    'fillable' => ['field1', 'field2', 'field3'],
    
    // Fields to hide in API responses
    'hidden' => ['password', 'secret_key'],
    
    // Validation rules for different operations
    'rules' => [
        'store' => [
            'name' => '
    
    // Filtering configuration
    'filterable_fields' => ['status', 'category_id', 'is_active'],
    
    // Relationships configuration (handles both form relations and Eloquent relationships)
    'relationships' => [
        'user_id' => [
            'entity' => 'users',
            'labelField' => 'name',
            'valueField' => 'id',
            'displayField' => 'email',
            'searchable' => true,
            ' 'middleware' => ['auth:sanctum', 'role:admin']
],

'rules' => [
    'update' => [
        'email' => 'ug,{{id}}'
    ]
]
bash
php artisan crud:install
bash
# Generate a new CRUD resource
php artisan make:crud-resource {name} --model={Model}

# Examples:
php artisan make:crud-resource users --model=App\\Models\\User
php artisan make:crud-resource posts --model=App\\Models\\Blog\\Post --logic --resource --permissions
php artisan make:crud-resource website_settings --model=App\\Models\\Website\\WebsiteSetting
bash
# Interactive mode to configure relationships
php artisan crud:relations {resource} --interactive

# Add a specific relationship
php artisan crud:relations {resource} --field={field} --entity={entity}

# Examples:
php artisan crud:relations vehicles --interactive
php artisan crud:relations posts --field=category_id --entity=categories --searchable --nullable
php artisan crud:relations vehicles --field=model_id --entity=vehicle-models --depends-on=make_id --filter-by=make_id
bash
# Generate permissions for resources
php artisan crud:permissions --resource={resource}

# Examples:
php artisan crud:permissions --resource=users
php artisan crud:permissions --resource=posts

GET /api/v1/users?page=2&per_page=20

GET /api/v1/users?