0

我尝试在 modal bootstrap 上更新产品的数据,但每个产品都有自己的更新形式。

但是错误验证显示在其他产品(相同字段)的所有模式更新上。

我可以使用命名消息包来解决这个问题吗?

我对所有产品都有一种更新形式。

我的观点:

@foreach($prdCatg as $prd)

        <div id="modifier" class="modal fade" role="dialog" tabindex="-1" >

            <div class=" modal-dialog modal-lg modal-dialog-centered" role="document">

                <div class="modal-content">

                    <div class="modal-header">
                        <h5 class="modal-title titre">Modifier le produit</h5>
                            <button type="button" class="close" data-dismiss="modal" aria-label="Close">
                                <span aria-hidden="true">&times;</span>
                            </button>
                    </div>

                    
                    <form method="POST" action="{{ route('com.produit.update') }}" enctype = "multipart/form-data">

                        @csrf
                        @method('PATCH')
                            
                        <div class="modal-body row justify-content-center">

                        <input type="hidden" id="id_prd" name="id_produit" value="">

                            <div class="col-lg-6">

                                <div class="form-group col-lg-12">
                                    <label for="Nom"  class="col-form-label">Nom du produit :</label>
                                    <input type="text" name="Nom" id="nom" class="shadow form-control @error ('Nom') is-invalid @enderror" value="{{ old('Nom') }}">
                                    @error('Nom')
                                        <div class="invalid-feedback">
                                            {{$errors->first('Nom')}}
                                        </div>
                                    @enderror
                                </div>

                                <div class="form-group col-lg-12">
                                    <label class="col-form-label" for="Catégorie">Le client :</label>
                                    <select name="Client" id="clt" class="shadow custom-select @error ('Client') is-invalid @enderror" style="color:#787878;">
                                        
                                        @foreach($clts as $clt)
                                            <option value="{{$clt->id_soc}}" {{$prd->soc_id == $clt->id_soc ? 'selected' : ''}}> {{$clt->nom_soc}} </option>
                                        @endforeach

                                    </select>

                                    @error('Client')
                                        <div class="invalid-feedback">
                                            {{$errors->first('Client')}}
                                        </div>
                                    @enderror
                                </div>

                                <div class="form-group col-lg-12">
                                    <label class="col-form-label" for="Catégorie">La catégorie :</label>
                                    <select name="Catégorie" id="catg" class="shadow custom-select @error ('Catégorie') is-invalid @enderror" style="color:#787878;">
                                    
                                        @foreach($catgs as $catg)
                                            <option value="{{ $catg->id_catg }}" {{$prd->catg_id == $catg->id_catg ? 'selected' : ''}}> {{ $catg->nom_catg }} </option>                                        
                                        @endforeach
    
                                    </select>
                                    
                                    @error('Catégorie')
                                        <div class="invalid-feedback">
                                            {{$errors->first('Catégorie')}}
                                        </div>
                                    @enderror
                                </div>

                            </div>

                            <div class="col-lg-6">

                                
                                <div class="form-group col-lg-12">
                                    <label for="Prix"  class="col-form-label">Prix unitaire :</label>
                                    <input type="text" name="Prix" id="prix" class="shadow form-control @error ('Prix') is-invalid @enderror" value="{{ old('Prix')}}">
                                    @error('Prix')
                                        <div class="invalid-feedback">
                                        {{$errors->first('Prix')}}
                                        </div>
                                    @enderror
                                </div>


                                <div class="form-group col-lg-12">
                                    <label for="Description" class="col-form-label">Description :</label>
                                    <textarea type="text" name="Description" id="descp" class="shadow form-control @error ('Description') is-invalid @enderror" rows="2" value="{{ old('Description')}}">
                                    </textarea>
                                    @error('Description')
                                        <div class="invalid-feedback">
                                            {{$errors->first('Description')}}
                                        </div>
                                    @enderror
                                </div>

                                <div class="form-group col-lg-12">   
                                    <label for="Logo"  class="col-form-label">Logo du produit :</label>         
                                    <div class="custom-file shadow">
                                        <input type="file" id="logo" name="Logo" class="custom-file-input @error ('Logo') is-invalid @enderror">
                                        <label class="custom-file-label" for="lm" style="color:#787878">Votre fichier.</label>
                                        <small>Formats acceptés : .jpg,.jpeg,.gif,.png</small>
                                        <small> Tailles acceptées : hauteur_max:200px, largeur_max:200px </small>
                                        @error('Logo')
                                            <div class="invalid-feedback">
                                                {{$errors->first('Logo')}}
                                            </div>
                                        @enderror 
                                    </div>            
                                </div>
                            </div>         

                            <div class="form-group row justify-content-center col-lg-10" style="margin-top:20px;">
                                <div class="">
                                    <button type="submit" class="btn btn-primary">
                                        Modifier
                                    </button>
                                </div>
                            </div>    
                        </div>
                    </form>
                </div>
            </div>
        </div>

    @endforeach

javascript:

 <script type="text/javascript">

    $('#modifier').on('show.bs.modal', function(event){
        var button = $(event.relatedTarget)
        var prd_id = button.data('prdid')
        var nom = button.data('prdnom')
        var clt = button.data('prdclt')
        var catg = button.data('prdcatg')
        var prix = button.data('prdprix')
        var descp = button.data('prddescp')

        var modal = $(this)

        modal.find('.modal-body #id_prd').val(prd_id);
        modal.find('.modal-body #nom').val(nom);
        modal.find('.modal-body #clt').val(clt);
        modal.find('.modal-body #catg').val(catg);
        modal.find('.modal-body #prix').val(prix);
        modal.find('.modal-body #descp').val(descp);
    })
</script>  

 @if (count($errors) > 0)
<script type="text/javascript">
    $( document ).ready(function() {
        $('#modifier').modal('show');
    });
</script>

@endif

控制器 :

 public function update(Request $request)
{
    
    $id_prd = $request->input('id_produit');

    request()->validate([
        
        'Nom'=>'required',
        'Client' => 'required',
        'Catégorie' => 'required',
        'Prix' => 'required|integer|not_in:0',
        'Description' => 'required|between:20,300',
        'Logo' => 'sometimes|image|mimes:png,jpg,jpeg|dimensions:max_heigh=200,max_width=200',

    ]);

    $produit = Produit::find($id_prd);

    if(request()->has('Logo')){
    
        $upload_logo = request()->file('Logo');
        $logo_name = request('Nom').'.'. $upload_logo->getClientOriginalExtension();
        $logo_path = public_path('/img/produit/');
        $upload_logo->move($logo_path, $logo_name);


        $produit ->nom_prd = $request->get('Nom');
        $produit ->soc_id = $request->get('Client');
        $produit ->soc_id = $request->get('Catégorie');
        $produit ->prix_prd = $request->get('Prix');
        $produit ->descp_prd = $request->get('Description');
        $produit ->logo_prd = '/img/produit/'.$logo_name;

        $produit->save();

        return redirect()->back()->with('success', 'Le produit a été mis à jour, merci !');
    }

    $produit ->nom_prd = $request->get('Nom');
    $produit ->soc_id = $request->get('Client');
    $produit ->soc_id = $request->get('Catégorie');
    $produit ->prix_prd = $request->get('Prix');
    $produit ->descp_prd = $request->get('Description');

    $produit->save();

    return redirect()->back()->with('success', 'Le produit a été mis à jour, merci !');
}

public function destroy(Request $request){

    $prd_id = $request->input('id_produit');
    $prd = Produit::where('id_prd',$prd_id);
    $prd -> delete();

    return redirect()->back()->with('success', 'Le produit a été supprimé.');

}
4

1 回答 1

0

我建议使用一个<form>并使用索引输入名称。如果我是正确的,您可以使用attribute.x(like Client.8) 来获取错误消息。

<form>
  @csrf

  @foreach ($prdCatg as $prd)
    <input name="Client[{{ $prd->id }}]" value="{{ $prd->value }}">

    @error('Client.' . $prd->id)
      <div class="invalid-feedback">
        {{ $message }} <!-- you can use this in L7 or you can still use $errors->first('Client.' . $prd->id) -->
      </div>
    @enderror
  @endforeach
</form>

这至少可以解决一个问题。但请确保您没有加载太多模型,因为性能;)

于 2020-07-20T18:32:32.220 回答