Description
PHP Version
8.1
CodeIgniter4 Version
4.4.1 OR 4.3.5
CodeIgniter4 Installation Method
Composer (using codeigniter4/appstarter
)
Which operating systems have you tested for this bug?
Linux
Which server did you use?
apache
Database
No response
What happened?
If I use the asterisk in the validation rule, it does not check for non existing key.
There are two workarounds, but I guess they are not the best solutions.
- Add a default value with the given key
- Use with numbers instead of asterisk
Steps to Reproduce
In any controller I use the following snippet in the initController method.
<?php
$requestData = [
'contacts' => [
'friends' => [
['name' => 'Fred Flinstone', 'age' => 20],
['age' => 21], // 'name' key does not exist
]
]
];
// $requestData['contacts']['friends'][1]['name'] ??= null; // Workaround for non existing keys
$this->validator = Services::validation();
$this->validator->setRules(
[
'contacts.friends.*.name' => 'required', // The "*" does not check for non existing keys and pass validation
// 'contacts.friends.0.name' => 'required', // With this solution works fine even if the key does not exist
// 'contacts.friends.1.name' => 'required', // With this solution works fine even if the key does not exist
]
);
dd($this->validator->run($requestData), $this->validator->getErrors());
Expected Output
I think the validation should check for it and fail if key does not exist (if there is a rule for it). So in my case the output should be:
$this->validator->run(...) boolean false
$this->validator->getErrors() array (1)
contacts.friends.1.name => string (46) "The contacts.friends.*.name field is required."
Now I get this:
$this->validator->run(...) boolean true
$this->validator->getErrors() array (0)
Anything else?
I did not see any reference in the documentation: https://codeigniter.com/user_guide/libraries/validation.html#setting-rules-for-array-data
I did not find any issue like this (maybe in the closed issues).