CodeIgniter 4验证匹配选项的正确语法

问题描述

我正在使用CodeIgniter 4.0.4实施网站的注册部分。

我在“验证”配置文件中实现了以下规则。

public $registro = [
    'registro.nombre' => [
        'rules' => 'required','errors' => [
            'required' => 'El nombre es un campo obligatorio.'
        ]
    ],'registro.apellido' => [
        'rules' => 'required','errors' => [
            'required' => 'El apellido es un campo obligatorio.'
        ]
    ],'registro.email' => [
        'rules' => 'required|valid_email','errors' => [
            'required' => 'El correo electrónico es un campo obligatorio.','valid_email' => 'Por favor,revisa el formato de tu correo electrónico,no parece ser válido.'
        ]
    ],'registro.password' => [
        'rules' => 'required|min_length[6]','errors' => [
            'required' => 'La contraseña es un campo obligatorio.','min_length' => 'La contraseña debe ser de al menos 6 caracteres.'
        ]
    ],'registro.verificar_password' => [
        'rules' => 'required|matches[registro.password]|min_length[6]','errors' => [
            'required' => 'Verificar contraseña es un campo obligatorio.','matches[registro.password]' => 'Las contraseñas no coinciden,por favor revisa.','min_length' => 'Verificar contraseña es un campo que debe ser de al menos 6 caracteres.'
        ]
    ]
];

一切正常,除了matches[registro.password]选项。问题是我不确定如何在错误消息中添加它。在the documentation内部,没有特定的示例。

我输入的密码(减少的代码)是:

<input type="password" name="registro[password]" minlength="6" id="registro_password" placeholder="Contraseña (mínimo 6 caracteres)" required />
<input type="password" name="registro[verificar_password]" minlength="6" data-equalto="registro_password" id="registro_verificar_password" placeholder="Verificar contraseña" required />

因此,基本上,当我将信息发送到控制器时,我得到了包含这两个索引的数组。我确保密码相同,但是我不断收到该错误。我试图更改错误索引以匹配这两个版本:

// Version 1
'matches[registro.password]' => 'Las contraseñas no coinciden,por favor revisa.'
// Output
// The registro.verificar_password field does not match the registro.password field.
// This is not a message I have defined as you can see above

// Version 2
'matches' => 'Las contraseñas no coinciden,por favor revisa.'
// Output
// Las contraseñas no coinciden,por favor revisa.
// This is the message I have defined above.

在此示例中,我实际上使用123456作为密码。

我尝试这样做,结果如下:

var_dump($post['registro']['password'] == $post['registro']['verificar_password']);
// Output
// bool(true)

if(!$validation->run($post,'registro')) {
    echo $validation->listErrors();
}
// Output 
// Las contraseñas no coinciden,por favor revisa.

我做错了什么,还是这是验证库错误?

解决方法

好的,我与CodeIgniter 4小组进行了检查,创建了issue report

这确实是一个错误,当人们阅读时,此错误将得到解决。只是为了澄清我自己的问题,将errors消息用于matches索引的正确方法是:

'registro.verificar_password' => [
    'rules' => 'required|matches[registro.password]|min_length[6]','errors' => [
        'required' => 'Verificar contraseña es un campo obligatorio.','matches' => 'Las contraseñas no coinciden,por favor revisa.','min_length' => 'Verificar contraseña es un campo que debe ser de al menos 6 caracteres.'
    ]
]

基本上,matches数组中的索引应该仅为errors

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...