wake-up-neo.com

Laravel: Bestätigen Sie ein ganzzahliges Feld, das größer als ein anderes sein muss

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?

31

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.

48
jedrzej.kurylo

Für Laravel 5.4 wird es sein:

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

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'
]; 
10
K.Toress

Ab Laravel 5.6 gt werden die Regeln gte, lt und lte hinzugefügt.

7

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.

1

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 als
  • gte - größer als gleich
  • lt - weniger als
  • lte - kleiner als gleich

mit 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'
]; 
0
Haritsinh Gohil