fleetbase/core-api
This package provides the base framework and API resources required by Fleetbase API.
Requires PHP 8.0+
⚡️ Install the Fleetbase Core API Composer:
composer require fleetbase/core-api
🧹 Keep a modern codebase with PHP CS Fixer:
composer lint
⚗️ Run static analysis using PHPStan:
composer test:types
✅ Run unit tests using PEST
composer test:unit
🚀 Run the entire test suite:
composer test
Resource transformers
Any extension can decorate the serialized output of any API resource without touching the resource or its model. Register a transformer against an HTTP resource class, an Eloquent model class, an interface, or '*', and FleetbaseResource::resolve() applies it to JSON responses, nested resources, collection items, webhook payloads and broadcast payloads.
namespace Fleetbase\MyExtension\Http\Transformers;
use Fleetbase\Contracts\PreparesResourceTransformation;
use Fleetbase\Http\Transformers\Transformer;
use Fleetbase\Models\User;
use Fleetbase\Support\ResourceTransformerContext;
use Illuminate\Http\Request;
use Illuminate\Http\Resources\Json\JsonResource;
use Illuminate\Support\Collection;
class UserBadgeTransformer extends Transformer implements PreparesResourceTransformation
{
protected static $target = User::class; // resource class, model class, interface, array of them, or '*'
protected static $priority = 10; // lower runs first; higher runs later and can override
protected static $contexts = ['http', 'webhook']; // null for every channel (http, webhook, broadcast)
protected static $only = 'internal'; // 'internal', 'public' or null for both
// Optional: runs once per resolve with every model about to be serialized, so you can batch-load.
public function prepare(Collection $models, Request $request, ResourceTransformerContext $context): void
{
$context->set('badges', Badge::whereIn('user_uuid', $models->pluck('uuid'))->get()->keyBy('user_uuid'));
}
public function transform(array $data, JsonResource $resource, Request $request, ResourceTransformerContext $context): array
{
return $data + ['badge' => $context->get('badges')[$resource->resource->uuid]->name ?? null];
}
}
Register transformers from your extension's service provider, either declaratively or by discovery:
class MyExtensionServiceProvider extends CoreServiceProvider
{
public $transformers = [
UserBadgeTransformer::class,
[OrderTotalsTransformer::class, ['priority' => 5]],
];
public function boot()
{
$this->registerTransformers(); // the $transformers property
$this->registerTransformersFrom(__DIR__ . '/../Http/Transformers'); // every ResourceTransformer in the directory
}
}
Closures work too, for quick one-off tweaks:
ResourceTransformerRegistry::register(
fn (array $data, JsonResource $resource, Request $request, ResourceTransformerContext $context) => $data + ['flag' => true],
['target' => \Fleetbase\FleetOps\Models\Order::class, 'contexts' => ['webhook'], 'only' => 'public']
);
Notes:
- Transformers may return
MissingValue/MergeValueobjects; they are filtered likewhen()/merge()output. Keys excluded withwithout()stay excluded. - Re-registering a class replaces its options;
ResourceTransformerRegistry::forget()andreset()remove registrations. - The registry is a container singleton (
app(ResourceTransformerRegistry::class)); registrations happen at boot and are shared by every request in an Octane worker.
Related Packages
Powerful PHP database abstraction layer (DBAL) with many features for database s...
Laravel Serializable Closure provides an easy and secure way to serialize closur...
Cli error handling for console/command-line PHP applications.
Version History
| Version | Released | PHP | Laravel | License |
|---|---|---|---|---|
| 1.6.68 | ^8.1 | ^9.0| | AGPL-3.0-or-later | |
| 1.6.67 | ^8.1 | ^9.0| | AGPL-3.0-or-later | |
| 1.6.66 | ^8.1 | ^9.0| | AGPL-3.0-or-later | |
| 1.6.65 | ^8.1 | ^9.0| | AGPL-3.0-or-later | |
| 1.6.64 | ^8.1 | ^9.0| | AGPL-3.0-or-later | |
| 1.6.63 | ^8.1 | ^9.0| | AGPL-3.0-or-later | |
| 1.6.62 | ^8.0 | ^9.0| | AGPL-3.0-or-later | |
| 1.6.61 | ^8.0 | ^9.0| | AGPL-3.0-or-later | |
| 1.6.60 | ^8.0 | ^9.0| | AGPL-3.0-or-later | |
| 1.6.59 | ^8.0 | ^9.0| | AGPL-3.0-or-later | |
| 1.6.58 | ^8.0 | ^9.0| | AGPL-3.0-or-later | |
| 1.6.57 | ^8.0 | ^9.0| | AGPL-3.0-or-later | |
| 1.6.56 | ^8.0 | ^9.0| | AGPL-3.0-or-later | |
| 1.6.55 | ^8.0 | ^9.0| | AGPL-3.0-or-later | |
| 1.6.54 | ^8.0 | ^9.0| | AGPL-3.0-or-later | |
| 1.6.53 | ^8.0 | ^9.0| | AGPL-3.0-or-later | |
| 1.6.52 | ^8.0 | ^9.0| | AGPL-3.0-or-later | |
| 1.6.51 | ^8.0 | ^9.0| | AGPL-3.0-or-later | |
| 1.6.50 | ^8.0 | ^9.0| | AGPL-3.0-or-later | |
| 1.6.49 | ^8.0 | ^9.0| | AGPL-3.0-or-later | |
| 1.6.48 | ^8.0 | ^9.0| | AGPL-3.0-or-later | |
| 1.6.47 | ^8.0 | ^9.0| | AGPL-3.0-or-later | |
| 1.6.46 | ^8.0 | ^9.0| | AGPL-3.0-or-later | |
| 1.6.45 | ^8.0 | ^9.0| | AGPL-3.0-or-later | |
| 1.6.44 | ^8.0 | ^9.0| | AGPL-3.0-or-later | |
| 1.6.43 | ^8.0 | ^9.0| | AGPL-3.0-or-later | |
| 1.6.42 | ^8.0 | ^9.0| | AGPL-3.0-or-later | |
| 1.6.41 | ^8.0 | ^9.0| | AGPL-3.0-or-later | |
| 1.6.40 | ^8.0 | ^9.0| | AGPL-3.0-or-later | |
| 1.6.39 | ^8.0 | ^9.0| | AGPL-3.0-or-later |
Showing the latest 30 of 159. See every release on Packagist
Pre-releases (17)
| Version | Released | PHP | Laravel | License |
|---|---|---|---|---|
| 1.1.6-alpha | ^7.4| | ^7.0| | MIT | |
| 1.1.5-alpha | ^7.4| | ^7.0| | MIT | |
| 1.1.4-alpha | ^7.4| | ^7.0| | MIT | |
| 1.1.3-alpha | ^7.4| | ^7.0| | MIT | |
| 1.1.2-alpha | ^7.4| | ^7.0| | MIT | |
| 1.1.1-alpha | ^7.4| | ^7.0| | MIT | |
| 1.1.0-alpha | ^7.4| | ^7.0| | MIT | |
| 1.0.9-alpha | ^7.4| | ^7.0| | MIT | |
| 1.0.8-alpha | ^7.4| | ^7.0| | MIT | |
| 1.0.7-alpha | ^7.4| | ^7.0| | MIT | |
| 1.0.6-alpha | ^7.4| | ^7.0| | MIT | |
| 1.0.5-alpha | ^7.4| | ^7.0| | MIT | |
| 1.0.4-alpha | ^7.4| | ^7.0| | MIT | |
| 1.0.3-alpha | ^7.4| | ^7.0| | MIT | |
| 1.0.2-alpha | ^7.4| | ^7.0| | MIT | |
| 1.0.1-alpha | ^7.4| | ^7.0| | MIT | |
| 1.0.0-alpha | ^7.4| | ^7.0| | MIT |