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 UserRegistrationValidationMore 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\ValidatableCollectionValidation 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); // falsepasses(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); // truemakeValidator(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;