This works:
$validation = \Config\Services::validation();
$validation->setRules([
'field1' => 'required|max_length[20]',
'array1' => 'required',
'array1.*' => 'required|numeric',
'array1_keys.*' => 'required|numeric',
'array1_count' => 'required|numeric|greater_than_equal_to[1]|less_than_equal_to[50]'
]);
$to_validate = $this->request->getPost();
$to_validate["array1_keys"] = array_keys($to_validate['array1'] ?? []);
$to_validate["array1_count"] = count($to_validate["array1_keys"]);
if (! $validation->run($to_validate)) {
return $this->failValidationErrors($validation->getErrors());
}
That said it is hardly elegant so I will happily upvote a more concise alternative.