2016-06-30 8 views
0

Ich habe eine drei verschiedene Formen, die an den gleichen Controller in Laravel übermitteln. Jedes Formular hat seine eigenen Validierungsregeln, die in einer Anfrage gespeichert sind. Hier ist ein Beispiel von meinem Code:Laravel Cast Anfrage an verschiedene Anfrage

public function store($id, $type, Request $request) 
{ 
    switch ($type) { 
     case 'daily': 
      $this->monthly($id, $type, $request); 
      break; 
     case 'monthly': 
      $this->monthly($id, $type, $request); 
      break; 
     case 'yearly': 
      $this->yearly($id, $type, $request); 

    } 
    return redirect(route('x.show', $id)); 
} 


private function monthly($id, $type, MonthlyFormRequest $request) 
{ 
    //store form 
} 

Allerdings bedeutet dies nicht funktioniert und throwns eine Instanz Fehler, da Request ist nicht der gleiche Typ wie MonthlyFormRequest im monthly Verfahren. Gibt es eine Möglichkeit, die Request zu MonthlyFormRequest zu werfen oder gibt es eine andere Möglichkeit, es zu tun? Ich möchte es vermeiden, Validierungsregeln im Controller selbst zu deklarieren. Was wäre der beste Weg, um eine einheitliche Request Art Anfrage in der Speichermethode zu erhalten und dann MonthlyFormRequest zu verwenden?

Antwort

3

Sie könnten den Typ Korbdurchschub- einen Anfrageparameter und den Schalter Fall auf Ihre Anfrage bewegen und die Kontrolle dort als solche Vorform:

In Ihrer Anfrage:

public function rules() 
     { 
      switch($this->type){ 
      case 'dailty': 
        return [ 
          'field': 'required' 
         ]; 
        break; 
      case 'monthly': 
        return [ 
          'field': 'required' 
         ]; 
        break; 
      case 'yearly': 
        return [ 
          'field': 'required' 
         ]; 
        break; 
      } 

     } 

In Ihrem Controller:

public function store($id, YourCustomRequest $request) 
{ 
    return redirect(route('x.show', $id)); 
}