Skip to content

Validatable Classes

Validatable classes allow you to reuse validation logic.

Manually

php
<?php

declare(strict_types=1);

namespace App\Validation;

use LaraPkgs\Validation\Validatable;
use LaraPkgs\Validation\ValidatableBuilder;
use LaraPkgs\Validation\ValidatableCollection;

final class UserRegistrationValidation extends Validatable
{
    protected function makeValidatableCollection(): ValidatableCollection
    {
        return ValidatableCollection::make(
            ValidatableBuilder::make('name')
                ->required()
                ->string()
                ->max(255),

            ValidatableBuilder::make('email')
                ->required()
                ->email()
                ->addMessages([
                    'required' => 'We need your email address to set up your account.',
                ]),
            ValidatableBuilder::make('password')
                ->required()
                ->string()
                ->min(8)
                ->confirmed()
                ->addMessages([
                    'confirmed' => 'The password confirmation does not match.',
                ])
        );
    }
}

Generator

bash
php artisan make:validation UserRegistrationValidation

More information about the generator can be found here.

Immutability

The ValidatableCollection class is 100% immutable.

Validatable Collection

The Validatable class wraps around the ValidatableCollection class. To get a clone of the underlying ValidatableCollection use the getValidatableCollection method. More information about the ValidatableCollection can be found here.

php
<?php

declare(strict_types=1);

use App\Validation\UserRegistrationValidation;

$validatable = new UserRegistrationValidation();

$collection = $validatable->getValidatableCollection(); // LaraPkgs\Validation\ValidatableCollection

Validation methods

validate(array $data)

Tries to validate the given data and throws an Illuminate\Validation\ValidationException when it fails and an array of validated data if it passes.

php
<?php

declare(strict_types=1);

use App\Validation\UserRegistrationValidation;

$validatable = new UserRegistrationValidation();

$data = [];
$validated = $validatable->validate($data); // Throws Illuminate\Validation\ValidationException;

$data = [
    'name' => 'John Doe',
    'email' => 'j.doe@unknown.com',
    'password' => 'XXXXXXXX',
    'password_confirmation' => 'XXXXXXXX'
];

$validated = $validatable->validate($data);

// [
//     'name' => 'John Doe',
//     'email' => 'j.doe@unknown.com',
//     'password' => 'XXXXXXXX',
// ]

fails(array $data)

Indicates if the given data will fail validation.

php
<?php

declare(strict_types=1);

use App\Validation\UserRegistrationValidation;

$validatable = new UserRegistrationValidation();

$data = [];
$fails = $validatable->fails($data); // true

$data = [
    'name' => 'John Doe',
    'email' => 'j.doe@unknown.com',
    'password' => 'XXXXXXXX',
    'password_confirmation' => 'XXXXXXXX'
];

$fails = $validatable->fails($data); // false

passes(array $data)

Indicates if the given data will pass validation.

php
<?php

declare(strict_types=1);

use App\Validation\UserRegistrationValidation;

$validatable = new UserRegistrationValidation();

$data = [];
$passes = $validatable->passes($data); // false

$data = [
    'name' => 'John Doe',
    'email' => 'j.doe@unknown.com',
    'password' => 'XXXXXXXX',
    'password_confirmation' => 'XXXXXXXX'
];

$passes = $validatable->passes($data); // true

makeValidator(array $data)

Instantiates a Laravel Validator for the given data.

php
<?php

declare(strict_types=1);

use App\Validation\UserRegistrationValidation;

$validatable = new UserRegistrationValidation();

$data = [
    'name' => 'John Doe',
    'email' => 'j.doe@unknown.com',
    'password' => 'XXXXXXXX',
    'password_confirmation' => 'XXXXXXXX'
];

$validator = $validatable->makeValidator($data); // Illuminate\Contracts\Validation\Validator;

Advanced usage