2016-03-20 15 views
0

ich einen benutzerdefinierten Validator in AppSeriveProvider.php mit Code erstellt haben: -Passing Variable Validator, Laravel

Validator::extend('less_than', function($attribute, $value, $parameters, $validator) { 
    $max_field = $parameters[0]; 
    $data = $validator->getData(); 
    $max_value = 100; 
    return $value < $max_value; 
}); 

Validator::replacer('less_than', function($message, $attribute, $rule, $parameters) { 
    return str_replace(':field', $parameters[0], $message); 
}); 

Und mein Controller haben dieses Stück Code

$messages = [ 
    'bid.required' => 'Please enter the amount', 
    'bid.less_than' => 'Insufficient balance', 
]; 
$balance = 100; 
$v = Validator::make($request->all(), [ 
     'bid' => 'required|less_than:$balance', 
    ],$messages); 

if ($v->fails()) { 
    return redirect('newgame') 
      ->withErrors($v) 
      ->withInput(); 
    }else { 
      echo "Success" 
    } 

I Balance Variable senden müssen der Validator und in der Validator-Funktion muss ich $ max_value (die momentan 100 haben) auf den Wert in $ balance setzen.

Nachdem in den Verzeichnissen suchen und auf den Code suchen Ich kann nicht verstehen, dass das, was der Inhalt $parameters variabel sind, weil seine 0-Index in max_field bezeichnet wird, wie $validator->getData() funktioniert? und wie $max_value seinen Wert bekommt.

Bitte jemand erklären mir das alles oder kommentieren den Link zu den jeweiligen Problemen. Und Hilfe bei der Lösung dieses große Problem.

+0

Laravel-Version? Hast du die Dokumentation gelesen, ist es gut geschrieben, solltest du es noch einmal versuchen bevor du fragst. – Kyslik

+0

Laravel Version 5.2.22 und ich stellte die Frage nach dem Lesen der Dokumentation, weil nur 4-5 wichtige Zeilen angegeben sind, die keine Informationen für die Übergabe einer Variablen an die Funktion enthalten –

Antwort

3

Um dieses Problem zu lösen, habe ich die Laravel-Funktion dd() verwendet, um zu sehen, was der Inhalt jeder Variablen ist. Und änderte dann den benutzerdefinierten Validator in AppSeriveProvider.php zu

Validator::extend('less_than', function($attribute, $value, $parameters, $validator) { 
      $balance = $parameters[0];   //$parameters array contain the $balance passed by validator::make() 
      $data = $validator->getData();  //$data contain the $request->all() 
      return $value < $balance;   //$value contain the bid set by user 
}); 

Validator::replacer('less_than', function($message, $attribute, $rule, $parameters) { 
      return str_replace(':field', $parameters[0], $message); 
}); 

und der Code des Controllers

$messages = [ 
      'bid.required' => 'Please enter the amount', 
      'bid.less_than' => 'Insufficient balance', 
]; 
$balance = $user->balance; 
$v = Validator::make($request->all(), [ 
      'bid' => "required|less_than:$balance", //this balance variable acts as the parameter array for extended validator class 
    ],$messages);      

if ($v->fails()) { 
      return redirect('newgame') 
         ->withErrors($v) 
         ->withInput(); 
}else { 
      echo "Success"; 
} 

Erklärung wird in den Kommentaren im Code zur Verfügung gestellt.