我在同一页面上有三种不同的表格。所有输入都有自己的验证规则,请求文件中的代码具有如下结构:
public function rules()
{
return [
//
'sold' => 'required',
'unit_in_stock' => 'required',
'unit_price_gbp' => 'required',
'returned_item' => 'required',
];
}
public function messages()
{
return [
'sold.required' => 'Please enter quantity of sold parts',
'unit_in_stock.required' => 'Please enter quantity of sold parts',
'unit_price_gbp.required' => 'Please enter price in GBP',
'returned_item.required' => 'Please enter quantity of items',
];
}
但是当我尝试提交三种表单中的一种时,另一种表单会返回有关空字段的消息。这与彼此无关。
这是我的表格:
{!! Form::open(['url' => route('addDelivery.addDelivery'),'class'=>'contact-form','method'=>'POST']) !!}
<label>Price in GBP £:</label>
{!! Form::text('unit_price_gbp', isset($price->unit_price_gbp) ? $price->unit_price_gbp : old('unit_price_gbp'), array('class'=>'form-control'), ['placeholder'=>'GBP']) !!}
<label>Quantity: </label>
{!! Form::text('unit_in_stock', isset($price->unit_in_stock) ? $price->unit_in_stock : old('unit_in_stock'), array('class'=>'form-control'), ['placeholder'=>'Qt.']) !!}
<input type="hidden" name="part_number" value="{{ $product->part_number }}">
<input type="hidden" name="part_id" value="{{ $product->id }}">
<input type="hidden" name="slug" value="{{ $product->slug }}">
{!! Form::button('Add Delivery', ['class' => 'btn btn-sm btn-success','type'=>'submit']) !!}
{!! Form::close() !!}
{!! Form::open(['url' => route('sold.sold'),'class'=>'contact-form','method'=>'POST']) !!}
<label style="margin-right: 30px;">Sell:</label>
{!! Form::text('sold', old('sold'), array('class'=>'form-control', 'placeholder'=>'Qty.')) !!}
<input type="hidden" name="part_id" value="{{ $product->id }}">
<input type="hidden" name="_token" value="{{ csrf_token() }}">
{!! Form::button('Sold', ['class' => 'btn btn-sm btn-success','type'=>'submit']) !!}
{!! Form::close() !!}
{!! Form::open(['url' => route('productReturn.productReturn'),'class'=>'contact-form','method'=>'POST']) !!}
<label>Return:</label>
{!! Form::text('returned_item', old('returned_item'), array('class'=>'form-control', 'placeholder'=>'Qty.')) !!}
<input type="hidden" name="part_id" value="{{ $product->id }}">
<input type="hidden" name="_token" value="{{ csrf_token() }}">
{!! Form::button('Return', ['class' => 'btn btn-sm btn-success','type'=>'submit']) !!}
{!! Form::close() !!}
但所有三种形式都是分开的,需要单独提交。
我该如何解决这个问题?
答案 0 :(得分:2)
从我看到的,你的规则跨越了3种不同的形式,这就是为什么在请求上,它在一个表单上检查所有这些规则。
将单独的规则数组(但您可以使用相同的消息数组)应用于特定的表单验证,然后您将不会将另一个表单的规则应用于您提交的表单。
已售出第二种形式的字段 unit_in_stock是第一种形式的字段 unit_price_gbp是第一种形式的字段 returned_item是第三种形式的规则
所以我的建议是将规则函数重写为类似的东西
public function rules($formType)
{
switch($formType){
case "addDelivery":
return [
//put only add delivery validation rules here
];
break;
case "sold":
return [
//put only sold validation rules here
];
break;
case "productReturn":
return [
//put only product return validation rules here
];
}
}
此时,只要您需要规则并调用规则函数并传入正确的表单名称,它就会返回您需要的正确验证规则集。
希望有所帮助。
答案 1 :(得分:0)
使3个表单提交3个不同的URL,但使用相同的功能。
Route::post('form-1', 'Controller@store');
Route::post('form-2', 'Controller@store');
Route::post('form-3', 'Controller@store');
也许只需确保在开始下一个表单之前打开并关闭每个表单。很可能您的提交按钮提交了多个表单?