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

Laravel验证规则:二级数组字段自定义消息失效及单独配置问题

Laravel Validation: Fixing Custom Messages for Array Fields & Creating Field-Specific Messages

Your Current Code

$rules = [ 
    'name' => 'required|string|max:255', 
    'price' => 'required|numeric|min:0', 
    'unit' => 'required|in:piece,kg,m', 
    'price_type'=>'required|string', 
    'service' => [ 
        'string', 
        'required', 
        Rule::in($services_ids->all()), 
    ], 
    'facility' => [ 
        'string', 
        'required', 
        Rule::in($facilities_ids->all()), 
    ], 
    'conciergeries' => [ 
        'array', 
        'required', 
        Rule::in($conciergeries_ids->all()), 
    ], 
]; 
$custom_messages = [ 
    'required' => 'Vous devez sélectionner un(e) :attribute.' 
]; 
$validated = request()->validate($rules, $custom_messages);

Your Issues

  1. The generic required message works for flat fields like name or price, but fails to apply to array-style fields (service, facility, conciergeries).
  2. Need to create unique custom validation messages for individual fields and their specific rules.

1. Applying Custom Messages to Array-Style Fields

The problem here is that when you define validation rules as an array for a field, Laravel expects you to target the field's rule explicitly using the {field}.{rule} syntax in your custom messages array. Here's how to fix it:

Option 1: Reuse the Generic Message Structure

If you want to keep the same message format for these array fields, just add explicit keys for their required rule:

$custom_messages = [ 
    'required' => 'Vous devez sélectionner un(e) :attribute.',
    // Map required rule for each array field
    'service.required' => 'Vous devez sélectionner un(e) :attribute.',
    'facility.required' => 'Vous devez sélectionner un(e) :attribute.',
    'conciergeries.required' => 'Vous devez sélectionner un(e) :attribute.',
];

Laravel will automatically replace :attribute with the field's name (localized if you have translations set up) just like it does for flat fields.

Option 2: Customize Messages for Each Array Field

If you want more tailored messages for each array field, you can write unique text for each:

$custom_messages = [ 
    'required' => 'Vous devez sélectionner un(e) :attribute.',
    'service.required' => 'Vous devez choisir un service valide.',
    'facility.required' => 'Veuillez sélectionner un équipement.',
    'conciergeries.required' => 'Vous devez sélectionner au moins un service de conciergerie.',
];

2. Creating Field-Specific Custom Messages

To define unique messages for specific fields and their rules, use the {field}.{rule} syntax for each combination you want to override. Here are some practical examples:

Example 1: Override a Single Rule for a Field

$custom_messages = [ 
    'required' => 'Vous devez sélectionner un(e) :attribute.',
    // Unique message for name's max character limit
    'name.max' => 'Le nom ne peut pas dépasser 255 caractères.',
    // Unique message for service's invalid selection
    'service.in' => 'Le service que vous avez sélectionné n\'est pas disponible.',
];

Example 2: Override Multiple Rules for a Single Field

If you want to customize every rule for a field, just add a key for each rule:

$custom_messages = [ 
    'required' => 'Vous devez sélectionner un(e) :attribute.',
    // Full customizations for the price field
    'price.numeric' => 'Le prix doit être un nombre valide.',
    'price.min' => 'Le prix ne peut pas être négatif.',
    // Customizations for the conciergeries array field
    'conciergeries.array' => 'Les services de conciergerie doivent être une liste.',
    'conciergeries.in' => 'Un des services de conciergerie sélectionnés n\'est pas valide.',
];

Quick Tips

  • When using rule objects like Rule::in(), the rule name in the message key is still the lowercase version of the rule (e.g., in for Rule::in()).
  • You can use placeholders like :attribute, :min, or :max in all custom messages to keep them dynamic.

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.06 18:02:32