mouhamad-mahfouz / helpers
Laravel API development helpers by Mahfouz
Installs: 15
Dependents: 0
Suggesters: 0
Security: 0
Stars: 0
Watchers: 0
Forks: 0
Open Issues: 0
pkg:composer/mouhamad-mahfouz/helpers
Requires
- php: ^8.2
- illuminate/console: ^11.0|^12.0
- illuminate/support: ^11.0|^12.0
- spatie/laravel-medialibrary: ^10.0
- spatie/laravel-query-builder: ^6.3
This package is auto-updated.
Last update: 2025-12-31 00:36:18 UTC
README
A Laravel package that provides helpful tools and utilities for API development. This package includes service classes, API controller generators, and other utilities to streamline your Laravel API development process.
Compatibility
This package supports Laravel 11 and 12.
Installation
You can install the package via composer:
composer require mouhamad-mahfouz/helpers
The package will automatically register its service provider.
Features
Format Response Trait
Easily format consistent JSON responses in your controllers:
use Mahfouz\Helpers\Traits\FormatResponse; class UserController extends Controller { use FormatResponse; public function index() { $users = User::all(); return $this->successResponse('Users retrieved successfully', $users); } public function show($id) { try { $user = User::findOrFail($id); return $this->successResponse('User retrieved successfully', $user); } catch (\Exception $e) { return $this->errorResponse('User not found'); } } }
Available methods:
successResponse(?string $message = null, mixed $data = null): arrayerrorResponse(string $message): array
Base Service Class
The package provides a BaseService class that implements common CRUD operations for your models. It integrates with Spatie's Query Builder for advanced filtering and pagination.
<?php namespace App\Services; use App\Models\User; use Mahfouz\Helpers\Services\BaseService; class UserService extends BaseService { protected string $modelClass = User::class; protected function defaultFilters(): array { return array_merge(parent::defaultFilters(), [ 'name', 'email' ]); } }
API Controller Generator
Generate API controllers with a single command:
php artisan make:api-controller UserController --methods=index,store,show,update,destroy --resource=id,name,email --store-request=name,email,password --update-request=name,email
Options:
--methods: Comma-separated list of methods to generate (index, store, show, update, destroy)--resource: Fields to include in the resource--store-request: Fields for the store request validation--update-request: Fields for the update request validation
You can also use --methods=* to generate all standard CRUD methods.
Service Generator
Generate service classes for your models:
php artisan make:service User
This will create a service class that extends the BaseService class and is configured for your model.
Media Cleanup Command
Clean up unused media files that are not referenced in the media table:
php artisan media:cleanup
This command will:
- Delete media files that exist in the storage but are not referenced in the database
- Remove empty directories after file cleanup
Note: This command requires the Spatie Media Library package to be installed and configured in your application.
Usage
Services
Once you've created a service, you can use it in your controllers:
class UserController extends Controller { protected UserService $userService; public function __construct(UserService $userService) { $this->userService = $userService; } public function index() { return UserResource::collection( $this->userService->paginate(['role']) ); } public function store(StoreUserRequest $request) { $user = $this->userService->store(UserData::from($request)); return new UserResource($user); } // Other methods... }
Available Service Methods
The BaseService class provides the following methods:
get(?callable $callback = null): Get all records with optional callback for query customizationpaginate(array $with = [], $per_page = null, ?callable $callback = null): Paginate records with eager loadingstore(object $data): Create a new recordupdate(Model $model, object $data): Update an existing recorddestroy(Model $model): Delete a record
Customization
You can publish the stubs to customize them:
php artisan vendor:publish --tag=mahfouz-stubs
This will publish the stubs to stubs/mahfouz in your application.
Contributing
Contributions are welcome! Please feel free to submit a Pull Request.
License
The MIT License (MIT). Please see License File for more information.