DownloadHTTP Request as Criteria source
Let's see a brief example of how to implement a CriteriaSource along with Laravel HTTP Request. 
First, create a Form Request to implement
the CriteriaSource interface. 
php artisan make:request SearchUserRequest
 
Next, implement the interface: 
namespace LaravelMade\Http\Requests;
use ComplexHeart\Domain\Criteria\Contracts\CriteriaSource;
use Illuminate\Foundation\Http\FormRequest;
class SearchUserRequest extends FormRequest implements CriteriaSource
{
    public function filterGroups(): array
    {
        // get the filter groups from the request.
        // you can also return N groups of filters (OR).
        return [$this->input('filters', [])];
    }
    public function orderType(): string
    {
        return $this->input('order', 'none');
    }
    public function orderBy(): string
    {
        return $this->input('orderBy', '');
    }
    public function pageLimit(): int
    {
        return $this->input('limit', 25);
    }
    public function pageOffset(): int
    {
        return $this->input('offset', 0);
    }
    public function pageNumber(): int
    {
        return $this->input('page', 0);
    }
}
 
Done, now you only need to call the fromSource method of the Criteria object. 
Route::get('users', function (SearchUserRequest $request): JsonResponse {
    $criteria = Criteria::fromSource($request);
    
    // use criteria to fetch the users.
});
 
Additionally, you can add rules to the FormRequest object to ensure the Criteria is properly instantiated. If the
Criteria object cannot be instantiated a CriteriaError will be thrown. 
Route::get('users', function (SearchUserRequest $request): JsonResponse {
    try {
        $criteria = Criteria::fromSource($request);
    } catch (CriteriaError $e) {
        // handle the Criteria error
    }
    
    // use criteria to fetch the users.
});
  |