Laravel能否无需前缀键验证索引对象数组?
Laravel 6.x 验证顶级索引数组的正确方式
Laravel完全支持无需前缀键的情况下直接验证顶级索引数组,你之前的规则不生效是因为层级匹配错误。
你的提交数据是顶级一维数组,数组中的每个元素是包含多个字段的对象,所以验证规则里只需要一层*来指代数组中的每个元素,而不是两层*.*。你之前写的*.*.order_id是在匹配「数组元素的子数组中的order_id」,但你的结构里每个元素直接有order_id字段,规则层级多了一层,导致无法匹配到对应字段,验证自然不生效。
正确的验证规则如下:
public function rules() { return [ '*.order_id' => 'required|integer', '*.is_delay' => 'required|boolean', '*.ship_date' => 'nullable|datetime', '*.times' => 'required|integer|min:1', '*.warehouse_id' => 'required|integer', '*.ship_type' => 'required|integer', '*.package' => 'required|array', '*.package.*.sku' => 'required|string', '*.package.*.qty' => 'required|integer|min:1', ]; }
规则层级说明:
*.order_id:指代顶级数组中每个元素的order_id字段*.package.*.sku:指代顶级数组中每个元素的package子数组里的每个元素的sku字段,这个层级是正确的,因为package本身是数组,需要额外一层*来遍历其内部元素
修改后就能正确验证你提交的顶级索引数组数据,无需给数据添加前缀包裹。
内容的提问来源于stack exchange,提问作者WeiCheng
相关产品推荐
相关产品推荐

