Ich habe zwei Felder, die nur optional sind, wenn beide nicht vorhanden sind:
$rules = [
'initial_page' => 'required_with:end_page|integer|min:1|digits_between: 1,5',
'end_page' => 'required_with:initial_page|integer|min:2|digits_between:1,5'
];
Nun muss end_page
größer als initial_page
sein. Wie sollte dieser Filter enthalten sein?
Es gibt keine integrierte Validierung, mit der Sie Feldwerte wie in Laravel vergleichen können. Daher müssen Sie einen benutzerdefinierten Validator implementieren, mit dem Sie die Validierung bei Bedarf erneut verwenden können . Glücklicherweise macht Laravel das Schreiben von benutzerdefinierten Validatoren wirklich einfach.
Beginnen Sie mit der Definition eines neuen Validators in Ihrem 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 brandneue Validierungsregel in Ihren $ -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'
];
Weitere Informationen zum Erstellen benutzerdefinierter Validatoren finden Sie hier: http://laravel.com/docs/5.1/validation#custom-validation-rules . Sie sind einfach zu definieren und können überall dort verwendet werden, wo Sie Ihre Daten validieren.
Für Laravel 5.4 wird es sein:
$rules = ['end_page'=>'min:'.(int)$request->initial_page]
Ich denke, du kannst so etwas 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'
];
Ab Laravel 5.6 gt
werden die Regeln gte
, lt
und lte
hinzugefügt.
Warum nicht einfach $min_number = $min + 1
Nummer definieren und Validator min:$min_number
verwenden, Beispiel:
$min = intval($data['min_number']) + 1;
return ['max_number' => 'required|numeric|min:'.$min];
Sie können dann eine benutzerdefinierte Fehlermeldung zurückgeben, um dem Benutzer den Fehler zu erklären.
die Frage wurde 2015 gestellt, daher sind die meisten Antworten jetzt auch 2019 veraltet
ich möchte eine Antwort geben, die die Funktionen von laravel team verwendet, die in der neuen Version enthalten sind.
so wie von @Sarpadoruk angegeben, ab laravel 5.6 laravel) hinzugefügte Validierungsfunktionen wie gt
, gte
, lt
und lte
was bedeutet:
gt
- größer alsgte
- größer als gleichlt
- weniger alslte
- kleiner als gleichmit gt
können Sie also überprüfen, ob Ihre Endseite größer als Ihre Startseite sein sollte, und Ihre Aufgabe wird jetzt ganz einfach:
$rules = [
'initial_page' => 'required_with:end_page|integer|min:1|digits_between: 1,5',
'end_page' => 'required_with:initial_page|integer|gt:initial_page|digits_between:1,5'
];