如何验证Laravel中自动生成的输入



今天我需要一些关于laravel验证的建议。当然有人可以在这个话题上帮助我(:

在我的项目中,我有两个模型:产品和客户。

Product : id - title - price
Customer : id - company

该产品的价格每天都在更新(包括水果和蔬菜(。

当一个客户被添加到数据库中时,卖家和客户可以为他阻止价格。无论香蕉价格是否发生变化,客户都会按照我们在数据库中输入当天定义的价格支付香蕉。

因此,我用一个透视表在这两个模型之间创建了一个多对多的关系:

Customer_Product : customer_id - product_id - price

现在,我想为客户更新一些价格。因此,我创建了一个表单,为每个附加到客户的产品生成输入:

<form action="{{ route('update') }}" method="POST">
@method('put')
@csrf
<input type="hidden" name="client" value="{{ $customer->id }}">
@foreach ($customer->products as $product)
<div>
<label for="product{{ $product->id }}">{{ $product->title }}</label>
<input type="number" step="0.01" name="product{{ $product->id }}" value="{{ $product->pivot->price }}">
</div>
@endforeach
<div>
<button type="submit">Submit</button>
</div>

这是为一个拥有15个附加产品的客户返回的dd($request->all(((:

^ array:18 [▼
"_method" => "put"
"_token" => "b8DNlOcQBtdTlQvwqt88sZYsX4d1bMwBsbGJ1Wj6"
"customer" => "11"
"product1" => "100000"
"product2" => "2000"
"product3" => "3000"
"product4" => "142"
"product5" => "150"
"product6" => "148"
"product7" => "105"
"product8" => "130"
"product9" => "152"
"product10" => "109"
"product11" => "138"
"product12" => "148"
"product13" => "129"
"product14" => "148"
"product15" => "15000"
]

因为我不知道有多少";产品";我将在表单上输入,在服务器端使用验证规则获取和验证这些数据的最佳方式是什么?

感谢您的帮助

我建议将输入名称更新为数组:

<label for="products[{{ $product->id }}][value]">{{ $product->title }}</label>
<input type="number" step="0.01" name="products[{{ $product->id }}][value]" value="{{ $product->pivot->price }}">
<input type="hidden" name="products[{{ $product->id }}][id]" value="{{ $product->id }}">

上面提供的内容类似于:

"products" => [
1 => [
"value" => "100",
"id"    => "1",
],
2 => [
"value" => "200",
"id"    => "2",
],
3 => [
"value" => "300",
"id"    => "3",
],
],

然后,您的验证可以是:

return [
'products'         => [
'array',
],
'products.*.id'    => [
'required',
Rule::exists('products', 'id'),
],
'products.*.value' => [
'required',
'numeric',
],
];

https://laravel.com/docs/9.x/validation#validating-嵌套阵列输入

相关内容

  • 没有找到相关文章

最新更新