Skip to content

lionix-team/castable-request

master
Switch branches/tags

Name already in use

A tag already exists with the provided branch name. Many Git commands accept both tag and branch names, so creating this branch may cause unexpected behavior. Are you sure you want to create this branch?
Code

Latest commit

 

Git stats

Files

Permalink
Failed to load latest commit information.
Type
Name
Latest commit message
Commit time
src
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Laravel Castable Request

Version Total Downloads

This package applies eloquent model casts to the request input.

Installation

composer require lionix/castable-request

Usage

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.

Global request casts

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');
    }
}

Todo

  • Add global request casts support for facades and request helper.

Credits