You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Respect Validation(PHP Slim):如何基于属性+规则自定义验证消息?

实现不同字段同规则的差异化自定义验证消息

当然可以实现!针对你遇到的nombre和dni字段,虽然都用了length验证规则但参数不同、需要返回不同提示的需求,这里有两种实用方案供你选择:

方案一:在定义验证规则时直接绑定专属消息

你可以在每个字段的length规则后,通过message()方法直接指定该字段的自定义提示。这种方式让规则和消息一一对应,直观又清晰:

$casoValidator = Validator::attribute('nombre', Validator::allOf(
    Validator::stringType(),
    Validator::notOptional()->message('{{name}} no es opcional'),
    Validator::stringType()->length(3, 100)->message('{{name}}不能少于3个字符或超过100个字符')
))
->attribute('idUsuario', Validator::allOf(Validator::intType()))
->attribute('numeroSertel', Validator::allOf(
    Validator::stringType(),
    Validator::stringType()->length(1, 100)->message('{{name}} no puede tener mas de 100 caracteres ni menos de uno')
))
->attribute('dni', Validator::allOf(
    Validator::stringType(),
    Validator::stringType()->length(8, 20)->message('{{name}}不能少于8个字符或超过20个字符')
));

try {
    $casoValidator->assert($asunto); // 注意你原代码里的变量名$asuntoValidator可能是笔误,建议统一成$casoValidator
} catch(NestedValidationException $exception) {
    // 这里直接获取所有验证失败的消息即可,无需在findMessages里重复定义
    $errors = $exception->getMessages();
}

方案二:在异常捕获时通过「字段名.规则名」精准匹配

如果希望集中管理所有自定义消息,可以在findMessages()里使用字段名.规则名作为键,这样就能精准区分不同字段的同一条规则:

$casoValidator = Validator::attribute('nombre',Validator::allOf(Validator::stringType(),Validator::notOptional(), Validator::stringType()->length(3,100))) 
->attribute('idUsuario',Validator::allOf(Validator::intType())) 
->attribute('numeroSertel',Validator::allOf(Validator::stringType(), Validator::stringType()->length(1,100))) 
->attribute('dni',Validator::allOf(Validator::stringType(), Validator::stringType()->length(8,20))); 

try { 
    $casoValidator->assert($asunto);
} catch(NestedValidationException $exception) { 
    $errors = $exception->findMessages([ 
        'nombre.length' => 'nombre不能少于3个字符或超过100个字符',
        'dni.length' => 'dni不能少于8个字符或超过20个字符',
        'numeroSertel.length' => '{{name}} no puede tener mas de 100 caracteres ni menos de uno', 
        'nombre.notOptional' => '{{name}} no es opcional', 
        // 其他规则消息...
    ]);
}

补充说明

这两种方案的核心是验证库支持规则级别的消息绑定和字段+规则的精准消息映射,完全能满足你差异化提示的需求。你可以根据代码习惯选择:如果喜欢规则和消息紧密关联,选方案一;如果偏好集中管理所有提示文本,选方案二。

内容的提问来源于stack exchange,提问作者JoseCarlosPB

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.13 07:54:21