Skip to content

Controllers

Validatable classes can be injected directly into controller action methods 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.

Controller

php
<?php

declare(strict_types=1);

namespace App\Http\Controllers;

use App\Validation\UserValidation;
use Illuminate\Http\JsonResponse;
use Illuminate\Http\Request;

final class UserController extends Controller
{
    public function __invoke(Request $request, UserValidation $validatable): JsonResponse
    {
        $validated = $validatable->validate($request->all());

        return response()->json([
            'status' => 'success',
            'data' => $validated,
        ]);
    }
}