2015-05-16 6 views
6

Ho un campo nella visualizzazione della qualcosa di andare cosìlaravel 5 multipla I campi di convalida

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

e così via ... quindi potete immaginare che è un campo dinamico che aggiunge in il modulo ogni volta che si seleziona il pulsante Aggiungi o qualsiasi altra cosa.

La domanda è: come posso VALIDARE questi campi dinamici e restituirò l'errore corretto per ogni campo?

Grazie!

Si noti che questo è Laravel 5 ma se si dispone di una soluzione Laravel 4 simile a questa, credo che (davvero credo) funzionerà.

Grazie ragazzi!

+0

Si dovrebbe essere in grado di usare la notazione punto per accedere agli elementi di matrice nidificati nel corso di valutazione, in modo da creare le regole per '' new.description' e n ew.amount' – Azeame

risposta

6

creare nella cartella Richieste validatore per questa forma come

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

maggiori informazioni How To: Validate an array of form fields with Laravel

poi in vista fare la prossima

@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 

in modo da aggiungere blocco con messaggio di errore per ogni blocco con input. Nel mio esempio unica descrizione elaborata, importo che si può elaborato simile descrizione Per il mio funziona e sembra enter image description here

UPD: laravel versione 5.2 ha la convalida serie in modo da poter creare richiesta di convalida del tipo:

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

per ulteriori informazioni leggere DOC