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

Laravel验证(required_if)中布尔值翻译失效问题排查

解决Laravel验证中布尔字段值翻译失效的问题

你猜的完全没错!这个问题确实和every_day字段的布尔类型直接相关,Laravel处理布尔值验证消息的逻辑和数值型字段不一样,才导致你用'true'/'false'作为键的翻译规则无法生效。

快速修复方案

把every_day的翻译键换成1和0即可(PHP会自动把布尔true转换为整数1,false转换为整数0来匹配数组键):

'values' => [
    'edit_type' => [
        '1' => 'Intern',
        '2' => 'Kunde'
    ],
    'every_day' => [
        '1' => 'ausgewählt',
        '0' => 'nicht ausgewählt'
    ]
]

为什么原来的写法不生效?

PHP的数组键不支持直接使用布尔类型,当Laravel试图用字段的布尔值去匹配你定义的字符串键'true'/'false'时,会触发自动类型转换:

  • 布尔true会被转换成整数1
  • 布尔false会被转换成整数0

这就导致你的翻译规则里的'true'/'false'键永远匹配不到实际的字段值,自然无法触发翻译。

更灵活的替代方案(自定义验证消息)

如果你不想依赖类型转换的规则,也可以针对every_day的验证规则直接写自定义消息,手动处理布尔值的翻译,尤其适合和required_if这类复杂规则配合:

'messages' => [
    'every_day.required_if' => function ($attribute, $value, $parameters) {
        $valueText = $value ? 'ausgewählt' : 'nicht ausgewählt';
        return "Das Feld :attribute muss $valueText sein, wenn :other :value ist.";
    },
    // 可按需添加其他涉及every_day的验证规则消息
],

这种方式更直观,也能避免类型转换带来的潜在问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 11:13:56