如何在特定模态上显示错误验证,以便使用laravel 7更新数据



我试图在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é.');
}

我建议使用一个<form>并使用索引输入名称。如果我是正确的,您可以使用attribute.x(如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>

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

最新更新