Validatable Collection
The ValidatableCollection defines the validation logic for one or more items (e.g. attribute, field, property).
Instantiation
<?php
declare(strict_types=1);
use LaraPkgs\Validation\ValidatableBuilder;
use LaraPkgs\Validation\ValidatableCollection;
$validatable = ValidatableCollection::make(
ValidatableBuilder::make('name')->required()->string()->max(255),
ValidatableBuilder::make('email')->required()->string()->email(),
ValidatableBuilder::make('password')->required()->string()->min(8)->confirmed()
);The ValidatableCollection can also be instantiated using the Facade or helper function. See the Facades & Helpers section here.
Add items
<?php
declare(strict_types=1);
use LaraPkgs\Validation\ValidatableBuilder;
use LaraPkgs\Validation\ValidatableCollection;
$validatable = ValidatableCollection::make()->add(
ValidatableBuilder::make('name')->required()->string()->max(255),
ValidatableBuilder::make('email')->required()->string()->email(),
ValidatableBuilder::make('password')->required()->string()->min(8)->confirmed()
);Get items
To get a cloned instance of the underlying items collection use the getItems method.
<?php
declare(strict_types=1);
use LaraPkgs\Validation\ValidatableBuilder;
use LaraPkgs\Validation\ValidatableCollection;
$validatable = ValidatableCollection::make()->add(
ValidatableBuilder::make('name')->required()->string()->max(255),
ValidatableBuilder::make('email')->required()->string()->email(),
ValidatableBuilder::make('password')->required()->string()->min(8)->confirmed()
);
$items = $validatable->getItems(); // Illuminate\Support\CollectionImmutability
The ValidatableCollection is 100% immutable so every mutation returns a new object. Items will be cloned before adding them. More information on item immutability can be found here.
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
declare(strict_types=1);
use LaraPkgs\Validation\ValidatableBuilder;
use LaraPkgs\Validation\ValidatableCollection;
$validatable = ValidatableCollection::make(
ValidatableBuilder::make('name')->required()->string()->max(255),
ValidatableBuilder::make('email')->required()->string()->email(),
ValidatableBuilder::make('password')->required()->string()->min(8)->confirmed()
);
$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
declare(strict_types=1);
use LaraPkgs\Validation\ValidatableBuilder;
use LaraPkgs\Validation\ValidatableCollection;
$validatable = ValidatableCollection::make(
ValidatableBuilder::make('name')->required()->string()->max(255),
ValidatableBuilder::make('email')->required()->string()->email(),
ValidatableBuilder::make('password')->required()->string()->min(8)->confirmed()
);
$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
declare(strict_types=1);
use LaraPkgs\Validation\ValidatableBuilder;
use LaraPkgs\Validation\ValidatableCollection;
$validatable = ValidatableCollection::make(
ValidatableBuilder::make('name')->required()->string()->max(255),
ValidatableBuilder::make('email')->required()->string()->email(),
ValidatableBuilder::make('password')->required()->string()->min(8)->confirmed()
);
$data = [];
$passes = $validatable->passes($data); // false
$data = [
'name' => 'John Doe',
'email' => 'j.doe@unknown.com',
'password' => 'XXXXXXXX',
'password_confirmation' => 'XXXXXXXX'
];
$passes = $validatable->passes($data); // truetoValidatorArguments()
Returns an array of arguments (rules, messages and attributes) that can be used to instantiate a Laravel Validator.
<?php
declare(strict_types=1);
$validatable = ValidatableCollection::make(
ValidatableBuilder::make('name')->required()->string()->max(255)
->setCustomAttribute('username'),
ValidatableBuilder::make('email')->required()->string()->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.'])
);
$arguments = $validatable->toValidatorArguments();
// [
// 'rules' => [
// 'name' => ['required', 'string', 'max:255'],
// 'email' => ['required', 'string', 'email'],
// 'password' => ['required', 'string', 'min:8', 'confirmed']
// ],
// 'messages' => [
// 'email.required' => 'We need your email address to set up your account.',
// 'password.confirmed' => 'The password confirmation does not match.'
// ],
// 'attributes' => [
// 'name' => 'username',
// 'email' => 'email',
// 'password' => 'password'
// ]
// ]makeValidator(array $data)
Instantiates a Laravel Validator for the given data.
<?php
declare(strict_types=1);
use LaraPkgs\Validation\ValidatableBuilder;
use LaraPkgs\Validation\ValidatableCollection;
$validatable = ValidatableCollection::make(
ValidatableBuilder::make('name')->required()->string()->max(255),
ValidatableBuilder::make('email')->required()->string()->email(),
ValidatableBuilder::make('password')->required()->string()->min(8)->confirmed()
);
$data = [
'name' => 'John Doe',
'email' => 'j.doe@unknown.com',
'password' => 'XXXXXXXX',
'password_confirmation' => 'XXXXXXXX'
];
$validator = $validatable->makeValidator($data); // Illuminate\Contracts\Validation\Validator;