在同一页面上使用多个表单进行Laravel请求验证

在同一页面上使用多个表单进行Laravel请求验证,laravel,laravel-5,laravel-validation,laravel-request,laravel-form,Laravel,Laravel 5,Laravel Validation,Laravel Request,Laravel Form,我在同一页上有三种不同的表格。所有输入都有自己的验证规则,请求文件中的代码结构如下: public function rules() { return [ // 'sold' => 'required', 'unit_in_stock' => 'required', 'unit_price_gbp' => 'required', 'returned_item' => 'requi

我在同一页上有三种不同的表格。所有输入都有自己的验证规则,请求文件中的代码结构如下:

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 &#163;:</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() !!}
{!!Form::open(['url'=>route('addDelivery.addDelivery'),'class'=>'contact-Form','method'=>'POST'])
价格单位为英镑£;:
{!!Form::text('unit\u price\u gbp',isset($price->unit\u price\u gbp)?$price->unit\u price\u gbp:old('unit\u price\u gbp'),数组('class'=>'Form-control'),['placeholder'=>'gbp'])
数量:
{!!Form::text('unit_in_stock',isset($price->unit_in_stock)?$price->unit_in_stock:old('unit_in_stock')、数组('class'=>'Form-control')、['placeholder'=>'Qt.])
{!!Form::button('adddelivery',['class'=>'btn btn sm btn success','type'=>'submit'])
{!!Form::close()!!}
{!!Form::open(['url'=>route('sell.sell'),'class'=>'contact-Form','method'=>'POST'])
出售:
{!!Form::text('sall',old('sall'),array('class'=>'Form-control','placeholder'=>'Qty'))
{!!表单::按钮('salled',['class'=>'btn btn sm btn success','type'=>'submit'])
{!!Form::close()!!}
{!!Form::open(['url'=>route('productReturn.productReturn'),'class'=>'contact-Form','method'=>'POST'])!!}
返回:
{!!Form::text('returned\u item',old('returned\u item'),array('class'=>'Form-control','placeholder'=>'Qty'))
{!!Form::button('Return',['class'=>'btn btn sm btn success','type'=>'submit'])
{!!Form::close()!!}
但这三种表格是分开的,需要单独提交


我如何解决这个问题

使3个表单提交到3个不同的URL,但使用相同的功能

Route::post('form-1', 'Controller@store');
Route::post('form-2', 'Controller@store');
Route::post('form-3', 'Controller@store');

在开始下一个表单之前,也许只需确保打开和关闭每个表单即可。很可能您的“提交”按钮提交了多个表单?

据我所见,您的规则跨越了3个不同的表单,这就是为什么在请求时,它会在一个表单上检查所有这些规则

将单独的规则数组(但您可以使用相同的消息数组)应用于特定的表单验证,这样您就不会将另一个表单的规则应用于您提交的表单

第二种形式的字段已售出 库存中的单位是第一种形式的字段 单价为第一种形式的字段 返回的项目是第三种形式的规则

因此,我的建议是将规则函数重写为如下内容

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
            ];
    }
}
此时,只要您需要规则并调用rules函数并传入正确的表单名称,它就会返回您需要的正确的验证规则集


希望有帮助

我已经换了。但这没有帮助,仍然是相同的问题。请更新您的问题,并输入您的表单代码。嗨,@eddysedove我已将我的“发件人代码”添加到问题中。