This is a Laravel framework integration for the JSON API parser.
The JSON API parser allows you to read and validate requests that are structured with the jsonapi.org specification.
You install the package by using composer:
composer require clintonelec/laravel-json-api-parser
When wanting to validate a resource within your payload, you need to give the JsonApiValidator
a ValidatorExecutor
.
This can be done in a few ways specified below. With all of these the first parameter is a string of the type of resource it needs to validate.
So for example if you had a request like:
{
"data": {
"id": 1,
"type": "user",
"attributes": {
"name": "Bob"
}
}
}
Then your first parameter would be 'user'
.
$jsonApiValidator = app(JsonApiValidator::class);
$jsonApiValidator->validator(
'user',
\ClintonElectronics\LaravelJsonApiParser\Validation\Validator::make(
['name' => 'required'],
['name.required' => 'You must provide a name']
)
);
The rules and messages you provide are whatever Laravel can support as our validator is just a decorated for Laravel's.
When using a custom validator class you will need to extend our validator class \ClintonElectronics\LaravelJsonApiParser\Validation\Validator
.
You then specify a rules
and messages
function inside the class and return an array of rules and messages in their respective functions.
<?php
namespace App\Validators;
use ClintonElectronics\LaravelJsonApiParser\Validation\Validator;
class UserValidator extends Validator
{
public function rules()
{
return [
'name' => 'required',
];
}
public function messages()
{
return [
'name.required' => 'Testing Message',
];
}
}
$jsonApiValidator = app(JsonApiValidator::class);
$jsonApiValidator->validator(
'user',
new UserValidator()
);
For more documentation on how to use the JSON API parser please visit the base package's repository.
The request:
{
"data": {
"type": "brochure",
"attributes": {
"title": "My Brochure",
"page_size": "A4"
}
}
}
The handler:
public function store(Request $request) : array
{
$collection = json_api()
->resolver('brochure', function (array $data) {
return Brochure::create($data);
})->parse($request->json()->all());
}
The Laravel JSON API Parser integration and it's base package are both realted under the [MIT License].