codeigniter4 / CodeIgniter4

Open Source PHP Framework (originally from EllisLab)
https://codeigniter.com/
MIT License
5.33k stars 1.9k forks source link

Bug: getValidated() missing data when double wildcard rule #9219

Open sanchawebo opened 4 days ago

sanchawebo commented 4 days ago

PHP Version

8.3

CodeIgniter4 Version

4.5.5

CodeIgniter4 Installation Method

Composer (using codeigniter4/appstarter)

Which operating systems have you tested for this bug?

macOS, Linux

Which server did you use?

apache

Database

MySQL 5.7, 10.5.22-MariaDB

What happened?

When running validation in the controller and grabbing the validated data with $this->validator->getValidated(), the data for double wild card rules (eg dates.*.*) is missing.

Steps to Reproduce

Implement this controller (or the logic):

<?php

namespace App\Controllers\Back;

use App\Controllers\BaseController;

class TestController extends BaseController
{
    public function test()
    {
        $data = [
            'id'    => 1,
            'dates' => [
                23 => [
                    45 => '3.4.24',
                ],
            ],
        ];

        $this->validateData($data, [
            'id'        => 'required',
            'dates.*.*' => 'required',
        ]);

        $validated = $this->validator->getValidated();

        d($data, $validated);
    }
}

Expected Output

The validated data including in this case the date array.

Anything else?

I think the problem is that the validation rule ends in a double wildcard, because when i change the array and rules to this it works:

$data = [
    'id'    => 1,
    'dates' => [
        23 => [
            45 => [
                'date' => '3.4.24',
            ],
        ],
    ],
];

$this->validateData($data, [
    'id'             => 'required',
    'dates.*.*.date' => 'required',
]);

$validated = $this->validator->getValidated();

d($data, $validated);

Does CI4 not like rules ending with wildcards?

ddevsr commented 2 days ago

@sanchawebo can you test on my PR #9220?

sanchawebo commented 2 days ago

Earliest i can test this would be next week, sorry.