$validationRules
for request validation$searchableFields
for search functionality$relationships
for eager loading$perPage
for pagination customizationThe CrudController
is a powerful abstract controller class that provides a complete set of CRUD (Create, Read, Update, and Delete) operations with additional features like pagination, searching, sorting, and relationship loading.
getAllRecords
: Gets paginated records with search, sort, and relationship loadinggetRecordById
: Gets a specific record with relationshipsstoreRecord
: Creates a new record with validationupdateRecord
: Updates an existing record with validationdeleteRecord
: Deletes an existing recordThe controller can be configured using these protected properties:
$model
: The Eloquent model instance$validationRules
: Array of validation rules for create/update operations$searchableFields
: Array of fields to search in$relationships
: Array of relationships to eager load$perPage
: Number of items per page (default: 15)Create a New Controller:
Extend the CrudController
for your specific model:
namespace App\Http\Controllers;
use omarchouman\LaraUtilX\Http\Controllers\CrudController;
use App\Models\User;
class UserController extends CrudController
{
public function __construct(User $model)
{
parent::__construct($model);
// Define validation rules
$this->validationRules = [
'name' => 'required|string|max:255',
'email' => 'required|email|unique:users',
'password' => 'required|min:6'
];
// Define searchable fields
$this->searchableFields = ['name', 'email'];
// Define relationships to load
$this->relationships = ['profile', 'roles'];
// Customize items per page
$this->perPage = 20;
}
// Map standard resource methods to CrudController methods
public function index(Request $request)
{
return $this->getAllRecords($request);
}
public function store(Request $request)
{
return $this->storeRecord($request);
}
public function show($id)
{
return $this->getRecordById($id);
}
public function update(Request $request, $id)
{
return $this->updateRecord($request, $id);
}
public function destroy($id)
{
return $this->deleteRecord($id);
}
}
Routing: Define routes in your routes/web.php or routes/api.php file:
use App\Http\Controllers\UserController;
Route::apiResource('users', UserController::class);
API Endpoints: The controller provides these endpoints:
GET /users - Get all users (with pagination)
GET /users/{id} - Get a specific user
POST /users - Create a new user
PUT /users/{id} - Update a user
DELETE /users/{id} - Delete a user
Query Parameters:
The getAllRecords
method supports these query parameters:
search
: Search term to filter recordssort_by
: Field to sort bysort_direction
: Sort direction (asc/desc)per_page
: Number of items per pageExample:
GET /users?search=john&sort_by=name&sort_direction=desc&per_page=20
Get All Records:
{
"data": [...],
"meta": {
"current_page": 1,
"last_page": 5,
"per_page": 15,
"total": 75
}
}
Get Single Record:
{
"data": {
"id": 1,
"name": "John Doe",
"email": "john@example.com",
"profile": {...},
"roles": [...]
}
}
Create/Update Record:
{
"message": "Record created/updated successfully",
"data": {
"id": 1,
"name": "John Doe",
"email": "john@example.com"
}
}
Delete Record:
{
"message": "Record deleted successfully"
}
The controller returns appropriate error responses for: