2014-11-14 12 views
5

FormRequests in Laravel 5 ist ein guter Ansatz für die Validierung und Autorisierung. Aber wie procceed, wenn ich Anfrage validieren muss, die Daten für eine Beziehung von eins zu viele enthalten. Zum Beispiel, wenn ich einfache Rechnung App habe. Eine Rechnung hat viele Dienste. Meine Form Post-Anforderung diese Daten enthalten:Laravel 5 Formularanfragen - validieren verwandte Daten

array (size=5) 
    'date' => string '2014-11-14' (length=10) 
    'num' => string '175' (length=3) 
    'client_id' => string '5' (length=1) 
    'vat' => string '1' (length=1) 
    'services' => 
    array (size=2) 
     0 => 
     array (size=3) 
      'description' => string 'Service 1' (length=36) 
      'value' => string '10' (length=2) 
      'items' => string '2' (length=1) 
     1 => 
     array (size=3) 
      'description' => string 'Service 2' (length=11) 
      'value' => string '20' (length=2) 
      'items' => string '2' (length=1) 

Jetzt in InvoiceFormRequest Klasse-I-Rechnungsdaten validieren, aber wie mit Dienstleistungen, um fortzufahren:

<?php namespace App\Http\Requests; 

use Illuminate\Foundation\Http\FormRequest; 
use Response; 

class InvoiceFormRequest extends FormRequest 
{ 
    public function rules() 
    { 
     return [ 
      'date' => 'required', 
      'num' => 'required', 
      'client_id' => 'required', 
      'vat' => 'required' 
     ]; 
    } 

    public function authorize() 
    { 
     return true; 
    } 
} 

Vielen Dank im Voraus!


aktualisieren: Wie ich here in Laravel wird 5.2 gelesen habe so etwas schreiben kann:

'services.*.description' => 'required', 
'services.*.value' => 'required:numeric', 
'services.*.items' => 'required:integer' 
+0

Sie benötigen einen benutzerdefinierten Validator zu verwenden. Siehe [this] (http://stackoverflow.com/a/26616023/397195), wenn Sie Ihren benutzerdefinierten Validator in Ihrem 'FormRequest' haben möchten. – Marwelln

+0

Ihr Update sollte eine Antwort sein. – whoan

+0

Ja, werde ich tun. Jetzt ist es eine Tatsache. Laravel 5.2 ist gerade erschienen. – fireball70

Antwort

1

Sie die "Array" Option für die "Dienste" Parameter könnten mit Hilfe der in den Regeln, aber das würde natürlich keine Daten in jedem Element validieren.

http://laravel.com/docs/master/validation#rule-array

Also, würde ich vorschlagen, wahrscheinlich etwas zu verwenden, wie Marwelln sagte mit einem benutzerdefinierten Validator sowie die „Array“ -Regel.

Ihre Regeln würden wahrscheinlich wie dieses

am Ende der Suche
public function rules() 
{ 
    return [ 
     'date' => 'required', 
     'num' => 'required', 
     'client_id' => 'required', 
     'vat' => 'required', 
     'services' => 'array|services' 
    ]; 
} 

und der benutzerdefinierte Validator könnte so etwas wie diese (Sie kann dies in einem Serviceprovider setzen sollen)

Validator::extend('services', function($attribute, $value, $parameters) 
{ 

    //foreach $value as $service 
      //validate $service['description'], $service['value'], $service['items'] 

    //return true or false depending on the validation of each element 
}); 

hoffen, es hat Ihnen geholfen zu finde die richtige Richtung! Jetzt