semhoun / slim-request-validation
A Slim middleware for HTTP request validation based on Respect/Validation
Package info
github.com/semhoun/slim-request-validation
pkg:composer/semhoun/slim-request-validation
Requires
- php: ^8.5
- psr/http-message: ^1.1 || ^2.0
- respect/validation: ^3.1
- slim/psr7: ^1.7 || ^2.0
Requires (Dev)
- php-di/php-di: ^7.1
- phpunit/phpunit: ^12.0 || ^13.0
- slim/slim: ^4.15
This package is auto-updated.
Last update: 2026-04-10 08:00:01 UTC
README
A Request validation library for the Slim 4 Framework. It uses the respect/validation library.
This repository is a fork of https://github.com/benycode/slim-request-validation.
Table of contents
Install
Via Composer
$ composer require semhoun/slim-request-validation
Requires PHP 8.5+ and Slim 4.
Compatibility
- PHP:
^8.5 - Slim Framework:
^4.15 respect/validation:^3.1slim/psr7:^1.7 || ^2.0phpunit/phpunitfor development:^12.0 || ^13.0
Usage
Create a Rule class:
use BenyCode\Slim\Validation\Rule\RequestValidationRuleInterface; use Respect\Validation\ValidatorBuilder as v; final class AnyRuleClass implements RequestValidationRuleInterface { public function rules(): array { return [ 'name' => v::alpha(), 'url' => v::url(), ]; } public function messages(): array { return [ 'url' => 'url must be a URL', ]; } }
With respect/validation 3.x, validators are built with Respect\Validation\ValidatorBuilder instead of the older static Validator API.
Add the middleware to a route:
use BenyCode\Slim\Validation\RequestValidation; use BenyCode\Slim\Validation\Middleware\RequestValidationExceptionMiddleware; use BenyCode\Slim\Validation\Transformer\RequestValidatorTransformFactory; use BenyCode\Slim\Validation\Encoder\JsonEncoder; use Slim\Factory\AppFactory; $app = AppFactory::create(); $app->post('/api/any_end_point', function ($request, $response) { return $response; }) ->add(new RequestValidationExceptionMiddleware(new RequestValidatorTransformFactory(), new JsonEncoder())) ->add(new RequestValidation([ new AnyRuleClass(), ])); $app->run();
Keep your code clean and split rules across classes when needed:
use BenyCode\Slim\Validation\RequestValidation; use BenyCode\Slim\Validation\Middleware\RequestValidationExceptionMiddleware; use BenyCode\Slim\Validation\Transformer\RequestValidatorTransformFactory; use BenyCode\Slim\Validation\Encoder\JsonEncoder; use Slim\Factory\AppFactory; $app = AppFactory::create(); $app->post('/api/any_end_point', function ($request, $response) { return $response; }) ->add(new RequestValidationExceptionMiddleware(new RequestValidatorTransformFactory(), new JsonEncoder())) ->add(new RequestValidation([ new AnyRuleClass(), new AppendedRuleClass(), new AppendedRule2Class(), new AppendedRule3Class(), ])); $app->post('/api/any_end_point2', function ($request, $response) { return $response; }) ->add(new RequestValidationExceptionMiddleware(new RequestValidatorTransformFactory(), new JsonEncoder())) ->add(new RequestValidation([ new AnyRuleClass(), new AppendedRule3Class(), ])); $app->run();
Testing
composer test