Skip to content

Form Requests

Validatable classes can be injected directly into the form request validator method using Laravel's dependency injection.

Validatable class

php
<?php

declare(strict_types=1);

namespace App\Validation;

use LaraPkgs\Validation\Support\Facades\Validatable;
use LaraPkgs\Validation\Validatable as BaseValidatable;
use LaraPkgs\Validation\ValidatableCollection;

final class UserValidation extends BaseValidatable
{
    protected function makeValidatableCollection(): ValidatableCollection
    {
        return Validatable::collection(
            Validatable::item('name')->required()->string(),
            Validatable::item('email')->required()->string()->email(),
        );
    }
}

More information on validatable classes can be found here.

FormRequest

php
<?php

declare(strict_types=1);

namespace App\Http\Requests;

use Illuminate\Contracts\Validation\Validator;
use Illuminate\Foundation\Http\FormRequest;
use App\Validation\UserValidation;

final class UserRequest extends FormRequest
{
    public function authorize(): bool
    {
        return true;
    }

    protected function validator(UserValidation $validatable): Validator
    {
        return $validatable->makeValidator($this->validationData());
    }
}

Controller

php
<?php

declare(strict_types=1);

namespace App\Http\Controllers;

use App\Http\Requests\UserRequest;
use Illuminate\Http\JsonResponse;

final class UserController extends Controller
{
    public function __invoke(UserRequest $request): JsonResponse
    {
        return response()->json([
            'status' => 'success',
            'data' => $request->validated(),
        ]);
    }
}