You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多
文档控制台
免费开始使用

CodeIgniter 4自定义表单验证规则未触发,不符合规则的输入仍通过验证求助

CodeIgniter 4自定义表单验证规则未触发,不符合规则的输入仍通过验证求助

嘿,我看了你的代码,发现了导致验证规则没触发的关键问题,咱们一步步来解决:

核心问题:自定义规则的方法签名不符合CI4要求

CodeIgniter 4对自定义验证规则的方法参数有严格的格式要求,你的noSpecialChars方法参数不符合规范,导致框架根本识别不出这是一个有效的验证规则,直接跳过了它的执行!

正确的自定义规则方法签名应该是:

  • 第一个参数:要验证的字符串
  • 第二个参数:当前验证的单个字段名(注意是单数$field,不是你写的复数$fields
  • 第三个参数:所有验证数据的引用传递(必须加&符号,也就是array &$data

你需要把App\Validation\CustomRules.php里的方法修改成这样:

namespace App\Validation;

class CustomRules {
    public function noSpecialChars(string $str, string $field, array &$data): bool {
        return preg_match('/^[a-zA-Z0-9 ]+$/', $str) === 1;
    }
}

额外优化建议

  1. 添加错误提示消息
    为了让用户看到明确的错误提示,你可以在语言文件里添加对应规则的错误文本:

    • 找到app/Language/下对应语言的Validation.php(比如中文是zh-CN/Validation.php
    • 添加一行:
      'noSpecialChars' => '用户名不能包含特殊字符',
      
  2. 清理冗余代码
    你在控制器里实例化了$validation = \Config\Services::validation();但完全没用到,$this->validate()会自动使用控制器的validator实例,这个实例已经加载了你在Config/Validation.php里配置的规则集,所以这个冗余的实例化代码可以删掉。

修改完成后,再测试输入John@Doe这类包含特殊字符的内容,验证规则就会正常触发,不符合要求的输入就会被拦截啦。

内容来源于stack exchange

火山引擎 最新活动