alberto-leon-crespo/rest-entity-manager
Install via Composer:
composer require vendor/package-name
Publish the package config (if applicable) and service provider:
php artisan vendor:publish --provider="Vendor\PackageName\PackageServiceProvider"
Key starting points:
FilterBuilder class in src/Filtering/ for advanced query construction.InterceptorManager in config/package.php.EventServiceProvider using the new PackageEvents facade.First use case: Implement a filtered API endpoint with interceptors:
use Vendor\PackageName\Facades\FilterBuilder;
use Vendor\PackageName\Facades\InterceptorManager;
Route::get('/filtered-data', function () {
$filteredData = FilterBuilder::table('users')
->add('active', true)
->withInterceptors()
->get();
return response()->json($filteredData);
});
Advanced Filtering Pipeline
// Chain filters with interceptors
$query = FilterBuilder::table('orders')
->where('status', 'pending')
->withInterceptors(['logFilter', 'validatePermissions'])
->get();
Request/Response Interception
// Register interceptors in config/package.php
'interceptors' => [
'request' => [
'Vendor\PackageName\Interceptors\AuthInterceptor',
'Vendor\PackageName\Interceptors\RateLimitInterceptor',
],
'response' => [
'Vendor\PackageName\Interceptors\CacheResponseInterceptor',
],
],
Event-Driven Extensions
// Listen to filter execution events
event(new FilterExecuted(
$query,
$filteredResults,
$interceptorsUsed
));
config/package.php under event_priorities.FilterService is now split into FilterBuilder and FilterExecutor. Update DI bindings.config/package.php:
'debug' => [
'log_filters' => env('APP_DEBUG', false),
],
InterceptorManager::debug() to inspect intercepted requests/responses.Custom Interceptors
class CustomInterceptor implements InterceptorContract {
public function handle($request, Closure $next) {
// Pre-processing
$response = $next($request);
// Post-processing
return $response;
}
}
Event Extensions
// Extend FilterExecuted event
class CustomFilterEvent extends FilterExecuted {
public function __construct($query, $results, array $interceptors, $customData) {
parent::__construct($query, $results, $interceptors);
$this->customData = $customData;
}
}
Filter Parameters
// Dynamic parameter interception
FilterBuilder::table('products')
->addDynamic('price', function ($value) {
return $value * 1.1; // Apply tax
});
FilterBuilder::cache():
$filtered = FilterBuilder::table('posts')
->cache(ttl: 300)
->get();
How can I help you explore Laravel packages today?