jamosaur/foundation
Foundation
What is this?
This is the base that I like to use for constructing API's with Laravel.
It is essentially a wrapper for Spatie's laravel-fractal.
Installation
composer require jamosaur/foundation- Update your API controllers to extend
Jamosaur\Foundation\ApiController. This extends the default Laravel controller but also adds more methods that we will use. - Update your API middleware in
app\Http\Kernel.phpto useJamosaur\Foundation\Middleware\ApiRequestMiddleware
Example Usage
Controller
<?php
declare(strict_types=1);
namespace App\Http\Controllers;
use App\Models\User;
use Illuminate\Http\JsonResponse;
use Jamosaur\Foundation\ApiController;
class UserController extends ApiController
{
public function index(): JsonResponse
{
$users = User::all();
// By default, this will attempt to transform the data with
// `\App\Transformers\UserTransformer`. The package takes replaces
// the `Controller` in the controller name with Transformer
// and attempts to load it from the `\App\Transformers\ namespace.
return $this->transformCollection('users', $users)
->respond();
}
public function differentNamespace(): JsonResponse
{
$users = User::all();
// You can define a different namespace for transformers.
return $this->setTransformerNamespace('\\App\\Domain\\Transformers')
->transformCollection('users', $users)
->respond();
}
public function chainingTransformers(): JsonResponse
{
$user = User::all();
$posts = Post::all();
$photo = Photo::query()->first();
// You can also chain methods to transform multiple
// sets of data.
return $this->setTransformer(new UserTransformer())
->transformCollection('users', $users)
->setTransformer(new PostTransformer())
->transformCollection('posts', $posts)
->setTransformer(new PhotoTransformer())
->transformItem('photo', $photo)
->respond();
}
public function definedTransformer(): JsonResponse
{
$users = User::query()->with('profile')->get();
// You can override which transformer is used, and also pass in
// any includes.
return $this->setTransformer(new CustomTransformer(), ['profile'])
->transformCollection('users', $users)
->respond();
}
}
Important Notes
- Transformers MUST implement
Jamosaur\Foundation\Contracts\TransformerContractand extendLeague\Fractal\TransformerAbstract
Related Packages
doctrine/dbal
Powerful PHP database abstraction layer (DBAL) with many features for database s...
644,549,754
9,698
laravel/serializable-closure
Laravel Serializable Closure provides an easy and secure way to serialize closur...
423,477,751
607
nunomaduro/collision
Cli error handling for console/command-line PHP applications.
403,217,078
4,664
Version History
| Version | Released | PHP | Laravel | License |
|---|---|---|---|---|
| 1.0.1 | ^8.2 | ^10.0| | ||
| 1.0.0 | ^8.2 | ^10.0| | ||
| 0.6 | ^8.0| | ^8.0| | ||
| 0.5 | ^8.0| | ^8.0| | ||
| 0.4 | ^8.0| | ^8.0| | ||
| 0.3 | ^8.0| | ^8.0| | ||
| 0.2 | ^8.0| | ^8.0| | ||
| 0.1 | ^8.0| | ^8.0| | ||
| 0.0.8 | ^8.0| | ^8.0| | ||
| 0.0.7 | ^8.0| | ^9.0 | ||
| 0.0.6 | ^8.0| | ^9.0 | ||
| 0.0.5 | ^8.0| | ^8 | ||
| 0.0.4 | ^8.0| | ^8 | ||
| 0.0.3 | ^8.0| | ^8 | ||
| 0.0.2 | ^8.0| | ^8 |