2017-09-02 1 views
1

Ist es möglich, eine dynamische FormRequest-Validierung in meiner Funktion zu erstellen? Siehe Beispielcode unten.Dynamische FormRequest-Validierung (Laravel)

Was ich meine ist, dass ich den "Request" -Parameter in die Variable $ formRequest ändern werde.

Mein Ziel ist es, dass ich verschiedene Validierungsregeln für einen dynamischen Datensatz eines einzelnen Modells erstellen möchte.

Wenn ich dies mit anderen Möglichkeiten erreichen könnte, lassen Sie es mich bitte wissen. Vielen Dank!

Edit:

Beispielszenario: Ich habe ein Formular, das Feld Vornamen, Mittelnamen und Nachnamen hat.

Erste Regel:

public function rules() 
{ 
    return [ 
    'firstname' => 'required', 
    'middlename' => 'required', 
    'lastname' => 'required' 
    ]; 
} 

Zweite Regel:

public function rules() 
{ 
    return [ 
    'firstname' => 'required', 
    'lastname' => 'required' 
    ]; 
} 

Wo in der zweiten Regel nur Vor- und Nachnamen erfordert.

Ich möchte nur wissen, ob es andere Möglichkeiten gibt, dies zu tun, anstatt mehrere Speichermethoden zu erstellen und mehr Routen hinzuzufügen.

Antwort

2

Überspringen FormRequest und mit der validate Methode auf der $request Instanz kann dies erreichen. Laracasts hat sogar eine Lektion dazu.

public function store(Request $request) { 
    $rules = [/*...*/]; 

    $attributes = $request->validate($rules); 

    Model::create($attributes); 

    return redirect(url('/')); 
} 
+0

Dies ist, was ich im Sinne habe, aber wenn möglich, würde Ich mag nur eine Funktion verwenden. – alvirbismonte

+0

Ich habe die Antwort umgeschrieben, stattdessen '$ request-> validate' zu ​​verwenden. Dies könnte zu Ihnen passen. – Marwelln

+0

Kombinieren Sie Ihren Vorschlag mit @Sletheren gibt mir eine Idee. Danke euch beiden. – alvirbismonte

1

Sie können eine benutzerdefinierte Anfrage erstellen:

php artisan make:request CustomRequest 

Dieser diese Klasse generieren:

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

    /** 
    * Get the validation rules that apply to the request. 
    * 
    * @return array 
    */ 
    public function rules() 
    { 
     return [ 
      // 
     ]; 
    } 
} 

Die authorize() Methode wird ermittelt, ob die Anforderung an erster Stelle validiert werden kann. Die rules()-Methode gibt die Validierungsregeln für die aktuelle Anforderung zurück.

Und dann in Ihrer Controller-Funktion:

public function yourfunction(CustomRequest $request) 
+0

Hallo @Sletheren, ja ich weiß das. Ich möchte einen dynamischen Datensatz validieren. Beispiel: Die Datenfelder von data1 sind firstname, mittelname, lastname, und dann sind data2-erforderliche Felder firstname, nur lastname. Also was ich im Sinn habe ist, ich würde data1Request und data2Request erstellen. – alvirbismonte

+0

Ja, Sie können das auch tun, Sie setzen ein generisches Request-Objekt und testen dann mit einer if-Anweisung (Beispiel: if ($ request ['type'] == 'data1') dann führen Sie eine benutzerdefinierte Validierung – Sletheren

+0

Nun, habe eine Idee mit dem, was Sie gesagt haben, danke @Sletheren – alvirbismonte