提交的表单在 Laravel 中检测到空对象请求

问题描述

创建订单时,我需要重定向到新页面以输入订购材料的信息并存储数据透视表(订单,材料),但是当我在第二页提交表单时,请求元素检测为空,我可以不恢复我的输入值来存储它,我不明白为什么它不起作用

表单代码

   <form class="form-material" action="{{ route('commandeMateriaus.store') }}" method="POST">
        @csrf

        <div  style="margin-bottom: 20px; color:black;">
            <div style="padding-right: 50px;">
                <div >
                    <span style="margin-right: 50px;"> <span style="font-weight: bold;"> Code de la commande : </span><input type="text" name="code_commande" value="{{ $commande->code_commande }}" style="border:none;" readonly> </span>
                </div>
                <span style="margin-right: 50px;"> <span style="font-weight: bold;"> Date de la commande : </span> {{ $commande->date_commande }} </span>
                <span style="margin-right: 50px;"> <span style="font-weight: bold;"> Fournisseur : </span> {{ $fournisseur->intitule_fournisseur }}</span>
            </div>
        </div>

        <div style="margin-bottom: 20px;">
            <div class="row">  
                    <div class="col-6">
                        <div class="form-group form-primary form-static-label">
                            <label class="form-label " style="top: -14px; color: black;">Matériaux <span class="text-danger">*</span> </label>
                                <div class="select">
                                    <select id="mySelect" class="materiaux form-control" name="materiaus[]" multiple size="5">
                                        @foreach($materiaus as $materiau)
                                            <option value="{{ $materiau->id }}"> {{ $materiau->intitule_materiau }}  </option>
                                        @endforeach
                                    </select>
                                </div>                
                            <span class="form-bar"></span>    
                        </div>
                    </div>      
                </div> 
        </div>
               
            <div>
                <h5>Liste des matériaux commandés :</h5>
                <table class="table m-b-0 text-center">
                    <thead>
                        <td>Matériau</td>
                        <td>Prix Unitaire</td>
                        <td>Quantité</td>
                        <td>Montant</td>
                    </thead>
                    <tbody >
                    @foreach($materiaus as $materiau)
                        <tr style="display:none;" id="{{ $materiau->id }}" class="data">
                            <td > {{ $materiau->intitule_materiau }} </td>
                            <td> <input type="text" id="prix{{ $materiau->id }}"  name="prix_unit_materiau" value="{{ $materiau->prix_unit_materiau }}" style="border:none;" readonly> </td>
                            <td > <input type="number" class="quantite" id="q{{ $materiau->id }}" name="quantite_materiau" style="border:none;" placeholder="Entrer la quantité" onchange="recupValeur(this.value,this.id);"> </td>
                            <td ><input type="decimal" class="montant" id="montant{{ $materiau->id }}" name="montant_materiau" value="0" style="border:none;" readonly></td>
                        </tr>
                    @endforeach
                        
                        <tr>
                            <td colspan="4" style="text-align:right;" >Total</td>
                            <td ><input type="decimal" name="total_commande" value="0" style="border:none;" id="total" readonly></td>
                        </tr>
                    </tbody>
                </table>
            </div>  

            <div class=" text-right" style="margin-top: 10px;">
                <button type="submit" class="btn btn-primary"> <i class="fa fa-fw fa-plus-circle" > </i> Ajouter</button>
                <button type="reset" class="btn btn-info" style="margin-left: 10px;"><i class="fa fa-fw fa-sync" ></i> Réinitialiser</button>
            </div>
                                             
        </form>

存储方法

public function store(Request $request)
{ 
    $request->validate([
        'code_commande' => 'required','materiaus' => 'required','quantite_materiau' => 'required','montant_materiau' => 'required','total_commande' => 'required'
    ]);
    
    $cm = new CommandeMateriau();

    $commande = Commande::where('code_commande','=',$request->code_commande)->first();
    $commande_id = $commande->id;
    $commande->total_commande = $request->total_commande;
    $commande->save();

    $cm->commande_id = $commande_id;
    $cm->quantite_materiau = $request->quantite_materiau;
    $cm->montant_materiau = $request->montant_materiau;

    foreach ($request->materiaus as $materiau){
        $cm->materiau_id = $materiau->id;

        $cm->save();
    } 

    return redirect()->back()
            ->with('success','Enregistrement ajouté avec succes.');
}

有人可以帮我吗

解决方法

因为您的输入类型是数组,请尝试在表单标记中添加此 enctype="multipart/form-data"

<form class="form-material" action="{{ route('commandeMateriaus.store') }}" method="POST" enctype="multipart/form-data"  >