mesak / laravel-opis-validator
Laravel FormRequest With Opis Validator
Installs: 4 834
Dependents: 0
Suggesters: 0
Security: 0
Stars: 1
Watchers: 1
Forks: 0
Open Issues: 0
Requires
- php: ^7.3|^8.0
- illuminate/support: ^8.0|^9.0
- opis/json-schema: ^2.0
README
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
}
}'