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?