You can validate your data using the Laravel Validation package.
Spiral provides a Laravel validator bridge component
that allows you to quickly and easily integrate Laravel Validation
into a project based on the Spiral Framework
.
Note
Read more about Validation in the Spiral Framework.
To install the component:
composer require spiral-packages/laravel-validator
To enable the component, you just need to add Spiral\Validation\Laravel\Bootloader\ValidatorBootloader
to the bootloaders list, which is located in the class of your application.
namespace App;
use Spiral\Validation\Laravel\Bootloader\ValidatorBootloader;
class App extends Kernel
{
protected const LOAD = [
// ...
ValidatorBootloader::class,
// ...
];
}
First of all, need to create a filter that will receive incoming data that will be validated by the validator.
Create a filter class and extend it from the base filter class Spiral\Filters\Model\Filter
, add
Spiral\Filters\Model\HasFilterDefinition
interface. Implement the filterDefinition
method, which should return
a Spiral\Validation\Laravel\FilterDefinition
object with validation rules.
Note
The validation rules are described in the official Laravel documentation.
namespace App\Filter;
use Spiral\Filters\Attribute\Input\Post;
use Spiral\Filters\Model\Filter;
use Spiral\Filters\Model\FilterDefinitionInterface;
use Spiral\Filters\Model\HasFilterDefinition;
use Spiral\Validation\Laravel\FilterDefinition;
use Spiral\Validation\Laravel\Attribute\Input\File;
use Symfony\Component\HttpFoundation\File\UploadedFile;
final class CreatePostFilter extends Filter implements HasFilterDefinition
{
#[Post]
public string $title;
#[Post]
public string $slug;
#[Post]
public int $sort;
#[File]
public UploadedFile $image;
public function filterDefinition(): FilterDefinitionInterface
{
return new FilterDefinition([
'title' => 'string|required|min:5',
'slug' => 'string|required|min:5',
'sort' => 'integer|required',
'image' => 'required|image'
]);
}
}
If you prefer to configure fields mapping in an array, you can define fields mapping in a filterDefinition
method.
namespace App\Filter;
use Spiral\Filters\Model\Filter;
use Spiral\Filters\Model\FilterDefinitionInterface;
use Spiral\Filters\Model\HasFilterDefinition;
use Spiral\Validation\Laravel\FilterDefinition;
final class CreatePostFilter extends Filter implements HasFilterDefinition
{
public function filterDefinition(): FilterDefinitionInterface
{
return new FilterDefinition(
[
'title' => 'string|required|min:5',
'slug' => 'string|required|min:5',
'sort' => 'integer|required',
'image' => 'required|image'
],
[
'title' => 'title',
'slug' => 'slug',
'sort' => 'sort',
'image' => 'symfony-file:image'
]
);
}
}
Note
Read more about Filters in the Spiral Framework.
When requesting a filter from a container, the data will be automatically validated.
When validation errors occur, a Spiral\Filters\Exception\ValidationException
containing validation errors will be thrown.
use App\Filter\CreatePostFilter;
use Spiral\Filters\Exception\ValidationException;
try {
$filter = $this->container->get(CreatePostFilter::class);
} catch (ValidationException $e) {
var_dump($e->errors); // Errors processing
}