{"id":13805886,"url":"https://github.com/DavidePastore/Slim-Validation","last_synced_at":"2025-05-13T21:31:40.214Z","repository":{"id":37547503,"uuid":"48914054","full_name":"DavidePastore/Slim-Validation","owner":"DavidePastore","description":"A validation library for the Slim Framework. It internally uses Respect/Validation.","archived":false,"fork":false,"pushed_at":"2023-12-24T07:18:18.000Z","size":132,"stargazers_count":170,"open_issues_count":17,"forks_count":30,"subscribers_count":7,"default_branch":"4.0","last_synced_at":"2024-10-19T21:43:54.579Z","etag":null,"topics":["middleware","php","slim-framework","validation"],"latest_commit_sha":null,"homepage":"","language":"PHP","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/DavidePastore.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"CONTRIBUTING.md","funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2016-01-02T15:28:54.000Z","updated_at":"2024-09-20T00:39:25.000Z","dependencies_parsed_at":"2024-06-18T13:40:24.478Z","dependency_job_id":"03861e66-b2fd-413e-9ac5-1cf879dcd4db","html_url":"https://github.com/DavidePastore/Slim-Validation","commit_stats":{"total_commits":86,"total_committers":6,"mean_commits":"14.333333333333334","dds":"0.13953488372093026","last_synced_commit":"1615fda8878af98dc5fbe8e4365cc102220d3ae5"},"previous_names":[],"tags_count":10,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/DavidePastore%2FSlim-Validation","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/DavidePastore%2FSlim-Validation/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/DavidePastore%2FSlim-Validation/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/DavidePastore%2FSlim-Validation/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/DavidePastore","download_url":"https://codeload.github.com/DavidePastore/Slim-Validation/tar.gz/refs/heads/4.0","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":225260365,"owners_count":17446085,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["middleware","php","slim-framework","validation"],"created_at":"2024-08-04T01:01:05.963Z","updated_at":"2024-11-18T22:30:52.617Z","avatar_url":"https://github.com/DavidePastore.png","language":"PHP","readme":"# Slim Framework Validation\n\n[![Latest version][ico-version]][link-packagist]\n[![Build Status][ico-github-actions]][link-github-actions]\n[![Coverage Status][ico-scrutinizer]][link-scrutinizer]\n[![Quality Score][ico-code-quality]][link-code-quality]\n[![Total Downloads][ico-downloads]][link-downloads]\n[![PSR2 Conformance][ico-styleci]][link-styleci]\n\nA validation library for the Slim Framework. It internally uses [Respect/Validation][respect-validation].\n\n## Table of contents\n\n- [Install](#install)\n- [Usage](#usage)\n  - [Register per route](#register-per-route)\n  - [Register for all routes](#register-for-all-routes)\n  - [Route parameters](#route-parameters)\n  - [JSON requests](#json-requests)\n  - [XML requests](#xml-requests)\n  - [Translate errors](#translate-errors)\n- [Testing](#testing)\n- [Contributing](#contributing)\n- [Credits](#credits)\n\n## Install\n\nVia Composer\n\n``` bash\n$ composer require davidepastore/slim-validation\n```\n\nRequires Slim 4.0.0 or newer.\n\n## Usage\n\nIn most cases you want to register `DavidePastore\\Slim\\Validation` for a single route, however,\nas it is middleware, you can also register it for all routes.\n\n\n### Register per route\n\n```php\nuse Respect\\Validation\\Validator as v;\nuse Slim\\Factory\\AppFactory;\n\nrequire __DIR__ . '/../vendor/autoload.php';\n\n$app = AppFactory::create();\n\n//Create the validators\n$usernameValidator = v::alnum()-\u003enoWhitespace()-\u003elength(1, 10);\n$ageValidator = v::numeric()-\u003epositive()-\u003ebetween(1, 20);\n$validators = array(\n  'username' =\u003e $usernameValidator,\n  'age' =\u003e $ageValidator\n);\n\n$app-\u003eget('/api/myEndPoint',function ($req, $res, $args) {\n    //Here you expect 'username' and 'age' parameters\n    if($req-\u003egetAttribute('has_errors')){\n      //There are errors, read them\n      $errors = $req-\u003egetAttribute('errors');\n\n      /* $errors contains:\n      array(\n        'username' =\u003e array(\n          '\"davidepastore\" must have a length between 1 and 10',\n        ),\n        'age' =\u003e array(\n          '\"89\" must be lower than or equals 20',\n        ),\n      );\n      */\n    } else {\n      //No errors\n    }\n\n})-\u003eadd(new \\DavidePastore\\Slim\\Validation\\Validation($validators));\n\n$app-\u003erun();\n```\n\n\n### Register for all routes\n\n```php\nuse Respect\\Validation\\Validator as v;\nuse Slim\\Factory\\AppFactory;\n\nrequire __DIR__ . '/../vendor/autoload.php';\n\n$app = AppFactory::create();\n\n//Create the validators\n$usernameValidator = v::alnum()-\u003enoWhitespace()-\u003elength(1, 10);\n$ageValidator = v::numeric()-\u003epositive()-\u003ebetween(1, 20);\n$validators = array(\n  'username' =\u003e $usernameValidator,\n  'age' =\u003e $ageValidator\n);\n\n// Register middleware for all routes\n// If you are implementing per-route checks you must not add this\n$app-\u003eadd(new \\DavidePastore\\Slim\\Validation\\Validation($validators));\n\n$app-\u003eget('/foo', function ($req, $res, $args) {\n  //Here you expect 'username' and 'age' parameters\n  if($req-\u003egetAttribute('has_errors')){\n    //There are errors, read them\n    $errors = $req-\u003egetAttribute('errors');\n\n    /* $errors contains:\n    array(\n      'username' =\u003e array(\n        '\"davidepastore\" must have a length between 1 and 10',\n      ),\n      'age' =\u003e array(\n        '\"89\" must be lower than or equals 20',\n      ),\n    );\n    */\n  } else {\n    //No errors\n  }\n});\n\n$app-\u003epost('/bar', function ($req, $res, $args) {\n  //Here you expect 'username' and 'age' parameters\n  if($req-\u003egetAttribute('has_errors')){\n    //There are errors, read them\n    $errors = $req-\u003egetAttribute('errors');\n  } else {\n    //No errors\n  }\n});\n\n$app-\u003erun();\n```\n\n\n### Route parameters\n\n```php\nuse Respect\\Validation\\Validator as v;\nuse Slim\\Factory\\AppFactory;\n\nrequire __DIR__ . '/../vendor/autoload.php';\n\n$app = AppFactory::create();\n\n//Create the validators\n$routeParamValidator = v::numeric()-\u003epositive();\n$validators = array(\n  'param' =\u003e $routeParamValidator,\n);\n\n$app-\u003eget('/foo/{param}', function ($req, $res, $args) {\n  //Here you expect 'param' route parameter\n  if($req-\u003egetAttribute('has_errors')){\n    //There are errors, read them\n    $errors = $req-\u003egetAttribute('errors');\n\n    /* $errors contains:\n    array(\n        'param' =\u003e array(\n          '\"wrong\" must be numeric',\n        ),\n    );\n    */\n  } else {\n    //No errors\n  }\n})-\u003eadd(new \\DavidePastore\\Slim\\Validation\\Validation($validators));\n\n$app-\u003erun();\n```\n\nNote that requests parameters take priority over route parameters, so if you use the same name for a route and request parameter, the last will win and it will be considered for validation.\n\n\n### JSON requests\n\nYou can also validate a JSON request. Let's say your body request is:\n\n```json\n{\n\t\"type\": \"emails\",\n\t\"objectid\": \"1\",\n\t\"email\": {\n\t\t\"id\": 1,\n\t\t\"enable_mapping\": \"1\",\n\t\t\"name\": \"rq3r\",\n\t\t\"created_at\": \"2016-08-23 13:36:29\",\n\t\t\"updated_at\": \"2016-08-23 14:36:47\"\n\t}\n}\n```\n\nand you want to validate the `email.name` key. You can do it in this way:\n\n```php\nuse Respect\\Validation\\Validator as v;\nuse Slim\\Factory\\AppFactory;\n\nrequire __DIR__ . '/../vendor/autoload.php';\n\n$app = AppFactory::create();\n\n//Create the validators\n$typeValidator = v::alnum()-\u003enoWhitespace()-\u003elength(3, 5);\n$emailNameValidator = v::alnum()-\u003enoWhitespace()-\u003elength(1, 2);\n$validators = array(\n  'type' =\u003e $typeValidator,\n  'email' =\u003e array(\n    'name' =\u003e $emailNameValidator,\n  ),\n);\n```\n\nIf you'll have an error, the result would be:\n\n```php\n//In your route\n$errors = $req-\u003egetAttribute('errors');\n\nprint_r($errors);\n/*\nArray\n(\n    [email.name] =\u003e Array\n        (\n            [0] =\u003e \"rq3r\" must have a length between 1 and 2\n        )\n\n)\n*/\n```\n\n\n### XML requests\n\nYou can also validate a XML request. Let's say your body request is:\n\nLet's say you have a POST request with a XML in its body:\n\n```xml\n\u003cperson\u003e\n   \u003ctype\u003eemails\u003c/type\u003e\n   \u003cobjectid\u003e1\u003c/objectid\u003e\n   \u003cemail\u003e\n     \u003cid\u003e1\u003c/id\u003e\n     \u003cenable_mapping\u003e1\u003c/enable_mapping\u003e\n     \u003cname\u003erq3r\u003c/name\u003e\n     \u003ccreated_at\u003e2016-08-23 13:36:29\u003c/created_at\u003e\n     \u003cupdated_at\u003e2016-08-23 14:36:47\u003c/updated_at\u003e\n    \u003c/email\u003e\n\u003c/person\u003e\n```\n\nand you want to validate the `email.name` key. You can do it in this way:\n\n```php\nuse Respect\\Validation\\Validator as v;\nuse Slim\\Factory\\AppFactory;\n\nrequire __DIR__ . '/../vendor/autoload.php';\n\n$app = AppFactory::create();\n\n//Create the validators\n$typeValidator = v::alnum()-\u003enoWhitespace()-\u003elength(3, 5);\n$emailNameValidator = v::alnum()-\u003enoWhitespace()-\u003elength(1, 2);\n$validators = array(\n  'type' =\u003e $typeValidator,\n  'email' =\u003e array(\n    'name' =\u003e $emailNameValidator,\n  ),\n);\n```\n\n\nIf you'll have an error, the result would be:\n\n```php\n//In your route\n$errors = $req-\u003egetAttribute('errors');\n\nprint_r($errors);\n/*\nArray\n(\n    [email.name] =\u003e Array\n        (\n            [0] =\u003e \"rq3r\" must have a length between 1 and 2\n        )\n\n)\n*/\n```\n\n\n### Translate errors\n\nYou can provide a callable function to translate the errors.\n\n```php\nuse Respect\\Validation\\Validator as v;\nuse Slim\\Factory\\AppFactory;\n\nrequire __DIR__ . '/../vendor/autoload.php';\n\n$app = AppFactory::create();\n\n//Create the validators\n$usernameValidator = v::alnum()-\u003enoWhitespace()-\u003elength(1, 10);\n$ageValidator = v::numeric()-\u003epositive()-\u003ebetween(1, 20);\n$validators = array(\n  'username' =\u003e $usernameValidator,\n  'age' =\u003e $ageValidator\n);\n\n$translator = function($message){\n  $messages = [\n      'These rules must pass for {{name}}' =\u003e 'Queste regole devono passare per {{name}}',\n      '{{name}} must be a string' =\u003e '{{name}} deve essere una stringa',\n      '{{name}} must have a length between {{minValue}} and {{maxValue}}' =\u003e '{{name}} deve avere una dimensione di caratteri compresa tra {{minValue}} e {{maxValue}}',\n  ];\n  return $messages[$message];\n};\n\n$middleware = new \\DavidePastore\\Slim\\Validation\\Validation($validators, $translator);\n\n// Register middleware for all routes or only for one...\n\n$app-\u003erun();\n```\n\n\n## Testing\n\n``` bash\n$ vendor\\bin\\phpunit\n```\n\n\n## Contributing\n\nPlease see [CONTRIBUTING](CONTRIBUTING.md) for details.\n\n\n## Credits\n\n- [Davide Pastore](https://github.com/davidepastore)\n\n\n[respect-validation]: https://github.com/Respect/Validation\n[custom-messages]: https://respect-validation.readthedocs.io/en/1.1/feature-guide/#custom-messages\n[ico-version]: https://img.shields.io/packagist/v/DavidePastore/Slim-Validation.svg?style=flat-square\n[ico-github-actions]: https://github.com/DavidePastore/Slim-Validation/workflows/Continuous%20Integration/badge.svg?branch=4.0\n[ico-scrutinizer]: https://img.shields.io/scrutinizer/coverage/g/DavidePastore/Slim-Validation.svg?style=flat-square\n[ico-code-quality]: https://img.shields.io/scrutinizer/g/davidepastore/Slim-Validation.svg?style=flat-square\n[ico-downloads]: https://img.shields.io/packagist/dt/davidepastore/slim-validation.svg?style=flat-square\n[ico-styleci]: https://styleci.io/repos/48914054/shield\n\n[link-packagist]: https://packagist.org/packages/davidepastore/slim-validation\n[link-github-actions]: https://github.com/DavidePastore/Slim-Validation/actions?query=workflow%3A%22Continuous+Integration%22+branch%3A4.0\n[link-scrutinizer]: https://scrutinizer-ci.com/g/DavidePastore/Slim-Validation/code-structure\n[link-code-quality]: https://scrutinizer-ci.com/g/DavidePastore/Slim-Validation\n[link-downloads]: https://packagist.org/packages/davidepastore/slim-validation\n[link-styleci]: https://styleci.io/repos/48914054/\n","funding_links":[],"categories":["Miscellaneous"],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2FDavidePastore%2FSlim-Validation","html_url":"https://awesome.ecosyste.ms/projects/github.com%2FDavidePastore%2FSlim-Validation","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2FDavidePastore%2FSlim-Validation/lists"}