2015-05-16 16 views
6

Ich habe ein Feld in der das so etwas wieLaravel 5 Mehrere Felder Validierung

geht Blick

<div> 
 
    <input type="text" name="new[0][description]" id="description-new-0"> 
 
    <input type="text" name="new[0][amount]" id="amount-new-0"> 
 
</div> 
 

 
<div> 
 
    <input type="text" name="new[1][description]" id="description-new-1"> 
 
    <input type="text" name="new[1][amount]" id="amount-new-1"> 
 
</div>

und so weiter ... so kann man sich vorstellen, dass sie ein dynamisches Feld, das fügt in das Formular jedes Mal, wenn Sie die Schaltfläche zum Hinzufügen oder was auch immer ankreuzen.

Die Frage ist, wie kann ich diese dynamischen Felder validieren und wird den richtigen Fehler für jedes Feld zurückgeben?

Danke!

Beachten Sie, dass dies Laravel 5 ist, aber wenn Sie eine Laravel 4-Lösung ähnlich dieser haben, denke ich (wirklich raten) wird es funktionieren.

Danke Jungs!

+0

sollten Sie in der Lage sein Punktnotation zu verwenden, um die verschachtelte Array-Elemente bei der Bewertung zuzugreifen, so erstellen Sie Ihre Regeln für 'new.description' und' n ew.amount' – Azeame

Antwort

6

in Ordnern Anfragen Prüfer erstellen für diese Form wie

<?php 
use Illuminate\Foundation\Http\FormRequest; 

class MultipleRequest extends FormRequest 
{ 

    /** 
    * Determine if the user is authorized to make this request. 
    * 
    * @return bool 
    */ 
    public function authorize() 
    { 
     return true; 
    } 

    /** 
    * Get the validation rules that apply to the request. 
    * 
    * @return array 
    */ 
    public function rules() 
    { 
     $rules = [ 
      'description' => 'required|array', 
     ]; 

     if ($this->request->get('description')) { 
      foreach($this->request->get('description') as $key => $val) 
      { 
       $rules['description.'.$key] = 'required|min:7'; //example 
      } 
     } 

     return $rules; 
    } 


    public function messages() 
    { 
     $messages = []; 
     if ($this->request->get('description')) { 
      foreach ($this->request->get('description') as $key => $val) { 
       $messages['description.' . $key . '.min'] = 'Wrong field.'; 
       $messages['description.' . $key . '.required'] = 'This field required.'; 
      } 
     } 
     return $messages; 
    } 
} 

weitere Informationen How To: Validate an array of form fields with Laravel

dann in Sicht haben die nächsten

@if (Session::has('_old_input')) 
     @for ($i=0; $i<count(Session::get('_old_input.description')); $i++) 
      <div> 
       @if($errors->any() && Session::get('errors')->getBag('default')->has('description.' . $i)) 
        <p class="">{{Session::get('errors')->getBag('default')->first('description.' . $i)}}</p> 
       @endif 


       <input type="text" name="new[][description]" id="description-new-{{$i}}" value="{{Session::get('_old_input.description.' . $i)}}"> 
       <input type="text" name="new[][amount]" id="amount-new-{{$i}}" value="{{Session::get('_old_input.amount.' . $i)}}"> 
      </div> 
     @endfor 
    @endif 

, so dass Sie Block mit Fehlermeldung für jeden Block hinzufügen mit Eingängen. In meinem Beispiel nur verarbeitet, Beschreibung, Menge können Sie ähnliche Beschreibung verarbeitet Für meine es funktioniert und aussehen wie enter image description here

UPD: Laravel Version 5.2 hat Array Validierung, so dass Sie Anfrage Prüfers erstellen können wie:

public function rules() 
{ 
    return [ 
     'names.*' => 'required|max:50', 
     'emails.*' => 'required|max:100', 
    ]; 
} 

für weitere Informationen lesen DOC

Verwandte Themen