Slim-Validation icon indicating copy to clipboard operation
Slim-Validation copied to clipboard

Validating an array of objects

Open craig-cogdill opened this issue 7 years ago • 2 comments

More of a help request than an issue...

I have a POST route that takes an array of objects as the body, like this:

[
   {
      "id": 1234,
      "key": "value"
   },
   {
      "id": 5678
      "key": "value2"   
   }
]

I want to validate that only those two keys exist in each object (no extra keys), and that their values are correct (int and string).

Is it possible to validate this with the library? I have tried this:

$validator = v::each(
   v::keySet(
      v::key("id", v::int()),
      v::key("key", v::string())   
   )
);

// ... at the end of the route ...

})->add(new \DavidePastore\Slim\Validation\Validation($validator));

So far I have not been successful and I am not sure what I am missing.

craig-cogdill avatar Sep 04 '18 23:09 craig-cogdill

Hi @craig-cogdill . Your question makes a lot of sense. At the current state Slim-Validation won't validate payloads that start with an array. This is a limitation and I think that I'll try to find a way to fix the issue.

DavidePastore avatar Sep 06 '18 21:09 DavidePastore

I created the branch add-array-validation-at-first-position with the fix. Please let me know if you like the solution and if it works as expected. You can also see the code changes here: #40.

DavidePastore avatar Sep 06 '18 22:09 DavidePastore