Looking to hire Laravel developers? Try LaraJobs

laravel-opis-validator maintained by mesak

Description
Laravel FormRequest With Opis Validator
Author
Last update
2022/08/16 11:04 (dev-main)
License
Links
Downloads
4 973

Comments
comments powered by Disqus

Laravel Opis JSON Schema

Laravel FormRequest With Opis JSON Schema Validator

Use Opis JSON Schema to validate your laravel form requests.

installation

composer require mesak/laravel-opis-validator

Or you could directly reference it into your composer.json file as a dependency

{
    "require": {
        "mesak/laravel-opis-validator": "^1.0.0"
    }
}

Example

Requests

<?php

namespace App\Http\Requests;

use Mesak\LaravelOpisValidator\JsonSchemaRequest;

class JsonSchema extends JsonSchemaRequest
{
    protected $extendValidatorMessage = true;

    /**
     * Get the validation rules that apply to the request.
     *
     * @return array
     */
    public function rules()
    {
        return [
            '$schema' => "http://json-schema.org/draft-07/schema#",
            "type" => "object",
            "title" => "Base Preference",
            "description" => "Base Preference Setting",
            "properties" => [
                "limit" => [
                    "type" => "integer",
                    "minimum" => 5,
                    "maximum" => 15,
                    "title" => "limit",
                    "attrs" => [
                        "placeholder" => "limit (limit)"
                    ]
                ],
                "page" => [
                    "type" => "object",
                    "title" => "Page",
                    "attrs" => [
                        "placeholder" => "Page ( Page )"
                    ],
                    "properties" => [
                        "limit" => [
                            "type" => "integer"
                        ]
                    ]
                ]
            ],
            "additionalProperties" => false,
            "required" => [
                "limit",
                "page"
            ]
        ];
    }
    protected function prepareForValidation()
    {
        //clear urlencoded data from request 
        //input integer is not allowed in json schema
        $intance = $this->getValidatorInstance();
        foreach ($intance->getRules() as $key => $rule) {
            $inputValue = $this->input($key);
            if ($rule == 'integer' && preg_match('/\d+/', $inputValue)) {
                $this->merge([
                $key => intval($inputValue),
                ]);
            }
        }
        $intance->setData($this->all());
    }
}

Controller


use App\Http\Requests\JsonSchema as JsonSchemaRequest;

    public function update(JsonSchemaRequest $request)
    {
        dd($request->validated());
    }

use postman to test your request.

curl --location --request POST 'http://localhost/test/update' \
--header 'Content-Type: application/json' \
--header 'Accept: application/json' \
--data-raw '{
    "limit" :10,
    "page": {
        "limit" : 10
    }
}'