This package applies eloquent model casts to the request input.
Laravel SaaS Boilerplate - Larafast
composer require lionix/castable-request
Implement Lionix\CastableRequest\Contracts\CastableRequestInterface
in your Request class. You will have to declare casts
method that will return the attributes that should be casted just like you would do it with eloquent attribute casting.
namespace App\Http\Requests;
use Illuminate\Foundation\Http\FormRequest;
use Lionix\CastableRequest\Contracts\CastableRequestInterface;
class PostsIndexRequest extends FormRequest implements CastableRequestInterface
{
/**
* Get request casts.
*
* @return array
*/
public function casts(): array
{
return [
'created_after' => 'date',
];
}
/**
* Get the validation rules that apply to the request.
*
* @return array
*/
public function rules()
{
return [
'created_after' => 'date',
];
}
}
The package will do all the magic and when you access the request created_after
attribute, in this case, it will be casted to an Illuminate\Support\Carbon
instance.
namespace App\Http\Controllers;
use App\Http\Requests\PostsIndexRequest;
class PostsController extends Controller
{
public function index(PostsIndexRequest $request)
{
$createdAfterDiff = $request->input('created_after')->diffForHumans();
// Example value: 1 month from now
}
}
All default eloquent models castings are available.
Starting from the Laravel 7.x you can define your own custom casts and use it in the request as well.
If you want to declare casts that will be applied globally without having to define it in each Request class you can use the Lionix\CastableRequest\Contracts\CastsRegistryInterface
in your service provider and register global casts.
<?php
namespace App\Providers;
use Illuminate\Support\ServiceProvider;
use Lionix\CastableRequest\Contracts\CastsRegistryInterface;
class AppServiceProvider extends ServiceProvider
{
/**
* Bootstrap any application services.
*
* @param \Lionix\CastableRequest\Contracts\CastsRegistryInterface $castRegistry
*
* @return void
*/
public function boot(CastsRegistryInterface $castRegistry)
{
$castRegistry->register('created_after', 'date');
}
}
- Add global request casts support for facades and
request
helper.