2017 © Pedro Peláez
 

library slim-validation

A slim middleware for validation based on Respect/Validation

image

davidepastore/slim-validation

A slim middleware for validation based on Respect/Validation

  • Sunday, October 15, 2017
  • by DavidePastore
  • Repository
  • 8 Watchers
  • 101 Stars
  • 27,997 Installations
  • PHP
  • 3 Dependents
  • 0 Suggesters
  • 14 Forks
  • 4 Open issues
  • 10 Versions
  • 14 % Grown

The README.md

Slim Framework Validation

![Latest version][ico-version] Build Status ![Coverage Status][ico-scrutinizer] Quality Score ![Total Downloads][ico-downloads] PSR2 Conformance, (*1)

A validation library for the Slim Framework. It internally uses Respect/Validation., (*2)

Table of contents

Install

Via Composer, (*3)

``` bash $ composer require davidepastore/slim-validation, (*4)


Requires Slim 3.0.0 or newer. ## Usage In most cases you want to register `DavidePastore\Slim\Validation` for a single route, however, as it is middleware, you can also register it for all routes. ### Register per route ```php use Respect\Validation\Validator as v; $app = new \Slim\App(); //Create the validators $usernameValidator = v::alnum()->noWhitespace()->length(1, 10); $ageValidator = v::numeric()->positive()->between(1, 20); $validators = array( 'username' => $usernameValidator, 'age' => $ageValidator ); $app->get('/api/myEndPoint',function ($req, $res, $args) { //Here you expect 'username' and 'age' parameters if($req->getAttribute('has_errors')){ //There are errors, read them $errors = $req->getAttribute('errors'); /* $errors contains: array( 'username' => array( '"davidepastore" must have a length between 1 and 10', ), 'age' => array( '"89" must be lower than or equals 20', ), ); */ } else { //No errors } })->add(new \DavidePastore\Slim\Validation\Validation($validators)); $app->run();

Register for all routes

use Respect\Validation\Validator as v;

$app = new \Slim\App();

//Create the validators
$usernameValidator = v::alnum()->noWhitespace()->length(1, 10);
$ageValidator = v::numeric()->positive()->between(1, 20);
$validators = array(
  'username' => $usernameValidator,
  'age' => $ageValidator
);

// Register middleware for all routes
// If you are implementing per-route checks you must not add this
$app->add(new \DavidePastore\Slim\Validation\Validation($validators));

$app->get('/foo', function ($req, $res, $args) {
  //Here you expect 'username' and 'age' parameters
  if($req->getAttribute('has_errors')){
    //There are errors, read them
    $errors = $req->getAttribute('errors');

    /* $errors contains:
    array(
      'username' => array(
        '"davidepastore" must have a length between 1 and 10',
      ),
      'age' => array(
        '"89" must be lower than or equals 20',
      ),
    );
    */
  } else {
    //No errors
  }
});

$app->post('/bar', function ($req, $res, $args) {
  //Here you expect 'username' and 'age' parameters
  if($req->getAttribute('has_errors')){
    //There are errors, read them
    $errors = $req->getAttribute('errors');
  } else {
    //No errors
  }
});

$app->run();

Route parameters

use Respect\Validation\Validator as v;

$app = new \Slim\App();

//Create the validators
$routeParamValidator = v::numeric()->positive();
$validators = array(
  'param' => $routeParamValidator,
);

$app->get('/foo/{param}', function ($req, $res, $args) {
  //Here you expect 'param' route parameter
  if($req->getAttribute('has_errors')){
    //There are errors, read them
    $errors = $req->getAttribute('errors');

    /* $errors contains:
    array(
        'param' => array(
          '"wrong" must be numeric',
        ),
    );
    */
  } else {
    //No errors
  }
})->add(new \DavidePastore\Slim\Validation\Validation($validators));

$app->run();

Note 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., (*5)

JSON requests

You can also validate a JSON request. Let's say your body request is:, (*6)

{
    "type": "emails",
    "objectid": "1",
    "email": {
        "id": 1,
        "enable_mapping": "1",
        "name": "rq3r",
        "created_at": "2016-08-23 13:36:29",
        "updated_at": "2016-08-23 14:36:47"
    }
}

and you want to validate the email.name key. You can do it in this way:, (*7)

use Respect\Validation\Validator as v;

$app = new \Slim\App();

//Create the validators
$typeValidator = v::alnum()->noWhitespace()->length(3, 5);
$emailNameValidator = v::alnum()->noWhitespace()->length(1, 2);
$validators = array(
  'type' => $typeValidator,
  'email' => array(
    'name' => $emailNameValidator,
  ),
);

If you'll have an error, the result would be:, (*8)

//In your route
$errors = $req->getAttribute('errors');

print_r($errors);
/*
Array
(
    [email.name] => Array
        (
            [0] => "rq3r" must have a length between 1 and 2
        )

)
*/

XML requests

You can also validate a XML request. Let's say your body request is:, (*9)

Let's say you have a POST request with a XML in its body:, (*10)

<person>
   <type>emails</type>
   <objectid>1</objectid>
   <email>
     <id>1</id>
     <enable_mapping>1</enable_mapping>
     <name>rq3r</name>
     <created_at>2016-08-23 13:36:29</created_at>
     <updated_at>2016-08-23 14:36:47</updated_at>
    </email>
</person>

and you want to validate the email.name key. You can do it in this way:, (*11)

use Respect\Validation\Validator as v;

$app = new \Slim\App();

//Create the validators
$typeValidator = v::alnum()->noWhitespace()->length(3, 5);
$emailNameValidator = v::alnum()->noWhitespace()->length(1, 2);
$validators = array(
  'type' => $typeValidator,
  'email' => array(
    'name' => $emailNameValidator,
  ),
);

If you'll have an error, the result would be:, (*12)

//In your route
$errors = $req->getAttribute('errors');

print_r($errors);
/*
Array
(
    [email.name] => Array
        (
            [0] => "rq3r" must have a length between 1 and 2
        )

)
*/

Translate errors

You can provide a callable function to translate the errors., (*13)

use Respect\Validation\Validator as v;

$app = new \Slim\App();

//Create the validators
$usernameValidator = v::alnum()->noWhitespace()->length(1, 10);
$ageValidator = v::numeric()->positive()->between(1, 20);
$validators = array(
  'username' => $usernameValidator,
  'age' => $ageValidator
);

$translator = function($message){
  $messages = [
      'These rules must pass for {{name}}' => 'Queste regole devono passare per {{name}}',
      '{{name}} must be a string' => '{{name}} deve essere una stringa',
      '{{name}} must have a length between {{minValue}} and {{maxValue}}' => '{{name}} deve avere una dimensione di caratteri compresa tra {{minValue}} e {{maxValue}}',
  ];
  return $messages[$message];
};

$middleware = new \DavidePastore\Slim\Validation\Validation($validators, $translator);

// Register middleware for all routes or only for one...

$app->run();

Testing

bash $ vendor\bin\phpunit, (*14)

Contributing

Please see CONTRIBUTING for details., (*15)

Credits

The Versions

15/10 2017

dev-route-info-2-not-defined

dev-route-info-2-not-defined

A slim middleware for validation based on Respect/Validation

  Sources   Download

GPL-2.0+

The Requires

 

The Development Requires

by Davide Pastore

middleware framework validator validation slim

15/10 2017

dev-master

9999999-dev

A slim middleware for validation based on Respect/Validation

  Sources   Download

GPL-2.0+

The Requires

 

The Development Requires

by Davide Pastore

middleware framework validator validation slim

21/03 2017

v0.5.0

0.5.0.0

A slim middleware for validation based on Respect/Validation

  Sources   Download

GPL-2.0+

The Requires

 

The Development Requires

by Davide Pastore

middleware framework validator validation slim

16/12 2016

v0.4.0

0.4.0.0

A slim middleware for validation based on Respect/Validation

  Sources   Download

GPL-2.0+

The Requires

 

The Development Requires

by Davide Pastore

middleware framework validator validation slim

13/11 2016

v0.3.1

0.3.1.0

A slim middleware for validation based on Respect/Validation

  Sources   Download

GPL-2.0+

The Requires

 

The Development Requires

by Davide Pastore

middleware framework validator validation slim

03/11 2016

dev-add-json-schema

dev-add-json-schema

A slim middleware for validation based on Respect/Validation

  Sources   Download

GPL-2.0+

The Requires

 

The Development Requires

by Davide Pastore

middleware framework validator validation slim

03/11 2016

v0.3.0

0.3.0.0

A slim middleware for validation based on Respect/Validation

  Sources   Download

GPL-2.0+

The Requires

 

The Development Requires

by Davide Pastore

middleware framework validator validation slim

06/10 2016

v0.2.0

0.2.0.0

A slim middleware for validation based on Respect/Validation

  Sources   Download

GPL-2.0+

The Requires

 

The Development Requires

by Davide Pastore

middleware framework validator validation slim

14/08 2016

v0.1.1

0.1.1.0

A slim middleware for validation based on Respect/Validation

  Sources   Download

GPL-2.0+

The Requires

 

The Development Requires

by Davide Pastore

middleware framework validator validation slim

02/01 2016

v0.1.0

0.1.0.0

A slim middleware for validation based on Respect/Validation

  Sources   Download

GPL-2.0+

The Requires

 

The Development Requires

by Davide Pastore

middleware framework validator validation slim