2015-08-16 8 views

Antwort

31

Es gibt keine integrierte Validierungs das wäre können Sie Feldwerte wie in Laravel, zu vergleichen, so müssen Sie implementieren Ein benutzerdefinierter Validator, mit dem Sie die Validierung bei Bedarf wiederverwenden können. Zum Glück macht Laravel das Schreiben von benutzerdefinierten Validator wirklich einfach.

Beginnen Sie mit der Definition neuer Validator in yor AppServiceProvider:

class AppServiceProvider extends ServiceProvider 
{ 
    public function boot() 
    { 
    Validator::extend('greater_than_field', function($attribute, $value, $parameters, $validator) { 
     $min_field = $parameters[0]; 
     $data = $validator->getData(); 
     $min_value = $data[$min_field]; 
     return $value > $min_value; 
    }); 

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

Jetzt können Sie Ihre Marke neue Gültigkeitsregel in Ihrer $ Regeln verwenden:

$rules = [ 
    'initial_page' => 'required_with:end_page|integer|min:1|digits_between: 1,5', 
    'end_page' => 'required_with:initial_page|integer|greater_than_field:initial_page|digits_between:1,5' 
]; 

Sie werden mehr finden Informationen zum Erstellen von benutzerdefinierten Validatoren finden Sie hier: http://laravel.com/docs/5.1/validation#custom-validation-rules. Sie sind einfach zu definieren und können dann überall dort verwendet werden, wo Sie Ihre Daten validieren.

+0

danke, ich habe es an meine Anwendung angepasst –

+0

danke, ich habe implementiert wie gesagt und versucht, meine 'en zu bearbeiten/validation.php' mit der folgenden Nachricht '" greater_than_field "=>" Feld \ ": Attribut \" muss größer sein als \ ": Feld \". ",' in 'Benutzerdefinierte Validierungssprachen ', aber ich kann nicht herausfinden mit was zu ersetzen ': Feld'. – dbr

+0

Ich aktualisierte die Antwort - Sie müssen Ersatz definieren, die Nachrichtenplatzhalter durch korrekte Werte ersetzt. Ich habe das nicht getestet, ich habe es einfach aus den Dokumenten http://laravel.com/docs/5.1/validation#custom-validation-rules genommen. Lass es mich wissen, wenn es funktioniert :) –

10

Ich glaube, Sie so etwas wie dies versuchen,

$init_page = Input::get('initial_page'); 

$rules = [ 
    'initial_page' => 'required_with:end_page|integer|min:1|digits_between: 1,5', 
    'end_page' => 'required_with:initial_page|integer|min:'. ($init_page+1) .'|digits_between:1,5' 
]; 
+0

meine Regeln sind in meiner Modellklasse und ich möchte nicht auf diese Variable zugreifen, aber danke :-) –

11

Für Laravel 5.4 wird es sein:

$rules = ['end_page'=>'min:'.(int)$request->initial_page] 
+0

'Anfrage ('initial_page')' sollte auch funktionieren. – Pengxer

+0

als ich getestet $ this-> get ('initial_page') funktioniert auch – sobhan

+3

Wie @sobhan vorgeschlagen, '$ this' kann funktionieren, aber es ist wichtig zu erwähnen, es hängt stark vom Kontext ab. Zum Beispiel ist '$ this' als eine 'Request'-Instanz in Formularanforderungen verfügbar. Für Controller müssen Sie direkt auf die Anfrage zugreifen, wie in früheren Antworten und Kommentaren angegeben. –

0

Warum definieren nicht nur $min_number = $min + 1 Nummer und verwenden Validator min:$min_number, Beispiel:

$min = intval($data['min_number']) + 1; 

return ['max_number' => 'required|numeric|min:'.$min]; 

Und Sie können dann benutzerdefinierte Fehlermeldung zurückgeben, um den Fehler zu erklären zum Benutzer.

Verwandte Themen