2015-05-16 16 views
6

Mam pole w widoku GO coś podobnegolaravel 5 wielu pól Validation

<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>

i tak dalej ... więc można sobie wyobrazić, że jego pole dynamiczne, które dodaje się formularz za każdym razem, gdy zaznaczysz przycisk Dodaj lub cokolwiek innego.

Pytanie brzmi, w jaki sposób mogę ZATWIERDZAĆ te dynamiczne pola i czy zwrócą odpowiedni błąd dla każdego pola?

Dzięki!

Uwaga, to jest Laravel 5, ale jeśli masz rozwiązanie Laravel 4 podobne do tego, domyślam się (naprawdę zgaduję), że zadziała.

Dzięki chłopaki!

+0

Powinieneś móc używać notacji dot aby uzyskać dostęp do zagnieżdżonych elementów tablicy podczas wyceny, więc tworzyć swoje zasady i '' n new.description' ew.amount' – Azeame

Odpowiedz

6

utworzyć w folderze życzenia walidatora dla tej formy jak

<?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; 
    } 
} 

więcej informacji How To: Validate an array of form fields with Laravel

następnie ze względu na temat następnego

@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 

więc dodać blok z komunikatem o błędzie dla każdego bloku z wejściami. W moim przykładzie tylko opis przetwarzane ilość można przetwarzać podobny opis dla mojego to działa i wygląda enter image description here

UPD: laravel wersja 5.2 posiada walidację tablicy, dzięki czemu można tworzyć żądania walidator jak:

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

uzyskać więcej informacji czytaj DOC