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

如何在Laravel表单请求中获取数组字段当前索引的code值?

Laravel表单请求数组字段自定义验证规则获取当前索引值的解决方案

你遇到的问题是直接用$this->input('coupons.*.code')无法拿到当前循环索引对应的code值,因为这里的*是验证规则的通配符,Laravel不会将其替换为实际索引。下面是两种可行的解决方法:

方法一:修改自定义验证规则类,通过字段属性解析索引

自定义规则类可以通过验证时传入的$attribute参数(格式如coupons.0.code)解析出当前索引,再获取对应product_ids,而当前的code值就是验证方法的$value参数。

自定义规则类代码

<?php

namespace App\Rules;

use Illuminate\Contracts\Validation\Rule;
use Illuminate\Http\Request;

class CheckCouponValidityForOrder implements Rule
{
    protected $request;

    public function __construct(Request $request)
    {
        $this->request = $request;
    }

    public function passes($attribute, $value)
    {
        // 从字段属性中拆分出当前coupon的索引
        $parts = explode('.', $attribute);
        $index = $parts[1];
        
        // 获取当前索引对应的product_ids
        $productIds = $this->request->input("coupons.$index.product_ids");
        
        // 这里编写你的实际验证逻辑
        // 示例:检查优惠券code($value)是否适用于对应的productIds
        // return Coupon::validForProducts($value, $productIds)->exists();
        
        return true; // 替换为实际验证结果
    }

    public function message()
    {
        return '优惠券无效或不适用于所选商品';
    }
}

表单请求中的验证规则

[
    'coupons'                 => 'nullable|array|min:1',
    'coupons.*.code'          => [
        'required', 
        'string', 
        new CheckCouponValidityForOrder($this) // 传入当前请求实例
    ],
    // 添加上product_ids的基础验证,确保字段有效
    'coupons.*.product_ids'   => 'required|array|min:1|exists:products,id'
]

方法二:使用闭包验证规则(无需单独规则类)

如果不需要复用验证逻辑,可以直接在验证规则中使用闭包,同样通过解析$attribute获取索引:

[
    'coupons'                 => 'nullable|array|min:1',
    'coupons.*.code'          => [
        'required', 
        'string',
        function ($attribute, $value, $fail) {
            // 解析当前索引
            $parts = explode('.', $attribute);
            $index = $parts[1];
            $productIds = $this->input("coupons.$index.product_ids");
            
            // 执行验证逻辑,不通过时调用$fail返回错误信息
            if (!/* 你的验证条件 */) {
                $fail('优惠券无效或不适用于所选商品');
            }
        }
    ],
    'coupons.*.product_ids'   => 'required|array|min:1|exists:products,id'
]

内容的提问来源于stack exchange,提问作者Md. A. A. Apu

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.14 17:16:04