【问题标题】:Laravel request validation with multiple forms on the same pageLaravel 在同一页面上使用多个表单进行请求验证
【发布时间】:2017-08-16 21:24:00
【问题描述】:

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

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() !!}

但是三个表格都是分开的,需要单独提交。

我该如何解决这个问题?

【问题讨论】:

    标签: laravel laravel-5 laravel-validation laravel-request laravel-form


    【解决方案1】:

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

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

    sold 是第二种形式的字段 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
                ];
        }
    }
    

    此时,只要您需要规则并调用规则函数并传入正确的表单名称,它就会返回您需要的一组正确的验证规则。

    希望对您有所帮助。

    【讨论】:

      【解决方案2】:

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

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

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

      【讨论】:

      • 我已经改了。但这并没有帮助,仍然是同样的问题。
      • 请更新您的问题,并输入您的表单代码。
      • 嗨,@EddyTheDove 我已将我的代码添加到问题中。
      猜你喜欢
      • 1970-01-01
      • 2018-06-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多