2017-02-18 7 views
1

Ich habe ein Problem mit Validierungsregeln mit verschachtelten Bedingungen.Validierungsregeln required_if mit anderen Bedingungen (Laravel 5.4)

class StoreRequest extends Request 
{ 
     public function authorize(){ 
     return true; 
     } 

     public function rules(){ 
       return [ 
        'type_id'  => 'required|integer', 
        'external_id' => 'required_if:type_id,==,3|integer', 
       ]; 
     } 
} 

der Tat möchte ich: - überprüfen Sie die EXTERNAL_ID nur, wenn die type_id gleich 3 - und prüfen, ob es sich um eine ganze Zahl ist.

Wenn ich meine Form zu veröffentlichen, funktioniert die Regeln, wenn ich einen type_id gleich 3 wählen Aber wenn ich einen anderen type_id wählen, wie 1 oder 2, die Validierung nicht passieren:

Der EXTERNAL_ID muss Sei eine ganze Zahl.

Ich versuche, die Nullable-Bedingung hinzuzufügen, aber required_if funktioniert nicht mehr

Haben Sie eine Idee?

Antwort

2

Ihre Regel führt zwei voneinander unabhängige Prüfungen aus; nur weil das Feld external_id nicht erforderlich ist, wenn die type_id! = 3, bedeutet nicht, dass die Ganzzahlprüfung ignoriert wird.

Was Sie suchen ist ein conditional rule, die Sie eine feinere Kontrolle, wann gibt eine Prüfung durchzuführen, z.B. :

$validator = Validator::make($data, [ 
    'type_id' => 'required|integer' 
]); 

$validator->sometimes('external_id', 'required|integer', function($input) { 
    return $input->type_id == 3; 
}); 

Wenn Formularvalidierung verwenden, können Sie die zugrunde liegende Validator-Instanz zugreifen, indem Sie die getValidatorInstance() Methode überschrieben:

class StoreRequest extends Request 
{ 
     public function authorize(){ 
     return true; 
     } 

     public function rules(){ 
       return [ 
        'type_id'  => 'required|integer' 
       ]; 
     } 

     protected function getValidatorInstance() { 
      $validator = parent::getValidatorInstance(); 
      $validator->sometimes('external_id', 'required|integer', function($input) { 
       return $input->type_id == 3; 
      }); 
      return $validator; 
     } 
} 
0

dies versuchen,

class StoreRequest extends Request 
    { 
      public function authorize(){ 
      return true; 
      } 

      public function rules(){ 
        return [ 
         'type_id'  => 'required|integer', 
         'external_id' => 'required_if:type_id|in:3|integer', 
        ]; 
      } 
    } 
0

kam gerade über das gleiche Problem und habe die folgende Antwort gefunden, die bei mir zu funktionieren scheint:

issue-using-required-if-validation-rule-in-form-builder

 return [ 
       'type_id'  => 'required|integer', 
       'external_id' => 'required_if:type_id,==,3|nullable|integer', 
      ]; 

Ergebnis für mich:

Feld nicht aufgefüllt, Typ-ID nicht 3 - pass

Feld nicht aufgefüllt, Typ id 3 - fail - Pflichtfeld

Feld besiedelte Typ id 3, nichtganzzahligen -

Feld bevölkert, Typ ID 3, integer integer in der Regel fehl - pa ss - alles gut!

Hinweis - Denken NULL-Regel kam in Laravel 5.3