Formularvalidierung


Schnelle Überprüfung

Routen definieren
  • Router erstellen
  • Validierungslogik schreiben
    • Validierungsfehlermeldung anzeigen
    • Hinweise zu optionalen Feldern
    • Verifizierungsformular anfordern
    • Bitte Formular erstellen Verifizierung wird angefordert
    Formular zur Autorisierungsüberprüfung anfordern
  • Fehler bei der benutzerdefinierten Verifizierung Fehlermeldung
    • Benutzerdefiniertes Validierungsattribut
    • Validator manuell erstellen
    • Automatische Weiterleitung
    Falsches Paket benennen
  • Post-Validierungs-Hook
    • Behandlung von Fehlermeldungen
    • Benutzerdefinierte Validierungsfehlermeldung
  • verfügbar Validierungsregeln
    • Validierungsregeln nach Bedingung hinzufügen
    Validierungsarray
  • Benutzerdefinierte Validierungsregeln
  • Validierungsregelobjekt verwenden
  • Abschlüsse verwenden
  • Erweiterungen verwenden
    • Einführung
    Laravel Zur Validierung der an die Anwendung übergebenen Daten stehen verschiedene Methoden zur Verfügung. Standardmäßig verwenden die Controller-Basisklassen von Laravel das Trait
  • , das eine bequeme Möglichkeit bietet, eingehende HTTP-Anfragen mithilfe einer Vielzahl leistungsstarker Validierungsregeln zu validieren.

Schnelle Validierung

Um die leistungsstarken Validierungsfunktionen von Laravel zu verstehen, schauen wir uns ein vollständiges Beispiel für die Validierung eines Formulars und die Anzeige einer Fehlermeldung an den Benutzer an.

Routen definieren

Nehmen wir zunächst an, dass die folgenden Routen in der Datei routes/web.php definiert sind:

Route::get('post/create', 'PostController@create');
Route::post('post', 'PostController@store');

Natürlich GET Die Route zeigt dem Benutzer ein Formular zum Erstellen eines neuen Blogbeitrags an, während die POST-Route den neuen Blogbeitrag in der Datenbank speichert.

Erstellen von Routern

Werfen wir einen Blick auf den Controller, der diese Routen verwaltet, storeMethode Belassen Sie dies vorerst leer.

<?php
  namespace App\Http\Controllers;
  use Illuminate\Http\Request;
  use App\Http\Controllers\Controller;
  class PostController extends Controller{    
      /**
     * 显示创建博客文章的表单。
     *
     * @return Response
     */   
  public function create()   
   {       
    return view('post.create');    
    }   
     /**
     * 保存一篇新的博客文章。
     *
     * @param  Request  $request
     * @return Response
     */   
    public function store(Request $request)   
     {      
       // 验证并存储博客文章...   
      }
   }

Schreiben der Validatorlogik

Jetzt beginnen wir mit dem Schreiben der Logik in der store-Methode zur Validierung neuer Blogbeitrag. Dazu verwenden wir die vom IlluminateHttpRequest-Objekt bereitgestellte Methode validate. Wenn die Überprüfung erfolgreich ist, kann der Code normal ausgeführt werden. Wenn die Überprüfung fehlschlägt, wird eine Ausnahme ausgelöst und die entsprechende Fehlerantwort wird automatisch an den Benutzer zurückgegeben. Bei einer typischen HTTP-Anfrage wird eine Redirect-Antwort generiert, während bei AJAX-Anfragen eine JSON-Antwort gesendet wird.

Kehren wir zur store-Methode zurück, um die validate-Methode im Detail zu verstehen:

/**
 * 保存一篇新的博客文章。
 *
 * @param  Request  $request
 * @return Response
 */
 public function store(Request $request){ 
    $validatedData = $request->validate([      
      'title' => 'required|unique:posts|max:255',        
      'body' => 'required',    
    ]);    
    // 博客文章验证通过
  }

Wie Sie sehen können, übergeben wir die erforderlichen Validierungsregeln an die validate-Methode. Auch hier gilt: Sollte die Verifizierung fehlschlagen, wird automatisch eine entsprechende Antwort generiert. Wenn die Überprüfung erfolgreich ist, funktioniert unser Controller weiterhin normal.

Ausführung nach dem ersten Validierungsfehler stoppen

Wenn Sie möchten, dass eine Validierungsregel nicht mehr ausgeführt wird, nachdem eine Eigenschaft zum ersten Mal bei der Validierung fehlschlägt, müssen Sie das < anhängen 🎜> Regel für das Attribut: bail

$request->validate([   
 'title' => 'bail|required|unique:posts|max:255',    
 'body' => 'required',
]);

In diesem Beispiel, wenn das Feld

title nicht übergibt Regel, dann prüft das Programm die unique-Regel nicht weiter. Regeln werden in der Reihenfolge überprüft, in der sie zugewiesen werden. max

Hinweis zur Implementierung von Array-Daten

Wenn Ihre HTTP-Anfrage einen „verschachtelten“ Parameter (d. h. Array) enthält, können Sie „Punkt“-Syntax übergeben, um diese anzugeben Parameter.

$request->validate([   
 'title' => 'required|unique:posts|max:255',    
 'author.name' => 'required',    
 'author.description' => 'required',
]);

Validierungsfehlermeldung anzeigen

Was passiert, wenn die eingehenden Anforderungsparameter die angegebenen Validierungsregeln nicht erfüllen? Wie bereits erwähnt, leitet Laravel den Benutzer automatisch zum vorherigen Standort weiter. Darüber hinaus werden alle Validierungsfehlermeldungen automatisch in session gespeichert.

Auch hier müssen wir die Fehlermeldung nicht explizit an die Ansicht in der Route GET binden. Denn Lavarel prüft die Fehlerinformationen in den Sitzungsdaten und bindet sie automatisch an die Ansicht (sofern die Ansichtsdatei vorhanden ist). Und die Variable $errors ist eine Instanz von IlluminateSupportMessageBag. Weitere Informationen zu diesem Objekt finden Sie in dieser Dokumentation.

{tip} $errors-Variablen werden durch die Web-Middleware, die von der IlluminateViewMiddlewareShareErrorsFromSession-Middleware-Gruppe bereitgestellt wird, an die Ansicht gebunden. Wenn diese Middleware angewendet wird, ist die $error-Variable in Ihrer Ansicht verfügbar, sodass immer davon ausgegangen wird, dass die $errors-Variable vorhanden ist und sicher verwendet werden kann.

Wenn im obigen Beispiel die Überprüfung fehlschlägt, wird der Benutzer zum create des Controllers weitergeleitet Methode, mit der wir Fehlermeldungen in der Ansicht anzeigen können:

<!-- /resources/views/post/create.blade.php -->
<h1>创建文章</h1>
@if ($errors->any())  
  <div class="alert alert-danger">     
     <ul>
       @foreach ($errors->all() as $error)                
       <li>{{ $error }}</li>
            @endforeach
      </ul>    
   </div>
 @endif
 <!-- 创建文章表单 -->

Hinweise zu optionalen Feldern

Standardmäßig ist Die AppHttpKernel-Klasse des globalen Middleware-Stacks in einer Laravel-Anwendung enthält TrimStrings und ConvertEmptyStringsToNull Middleware. Wenn Sie also nicht möchten, dass der Validator null-Werte als ungültig behandelt, müssen Sie das „optionale“ Anforderungsfeld als nullable markieren, zum Beispiel:

$request->validate([  
  'title' => 'required|unique:posts|max:255',    
  'body' => 'required',    
  'publish_at' => 'nullable|date',
]);

in diesem Beispiel. Wir geben an, dass das Feld publish_at null oder ein gültiges Datumsformat sein kann. Wenn der Modifikator nullable nicht zur Regeldefinition hinzugefügt wird, betrachtet der Validator null als ungültiges Datumsformat.

AJAX-Anfrage und Validierung

In diesem Beispiel verwenden wir ein traditionelles Formular, um Daten an die Anwendung zu senden. Aber in Wirklichkeit verwenden viele Programme AJAX zum Senden von Anfragen. Wenn wir die validate-Methode in einer AJAX-Anfrage verwenden, generiert Laravel keine Umleitungsantwort, sondern stattdessen eine JSON-Antwort, die alle Validierungsfehlerinformationen enthält. Diese JSON-Antwort wird mit einem HTTP-Statuscode 422 gesendet.

Validierungsformularanforderung

Formularanforderungsüberprüfung erstellen

Angesichts komplexerer Überprüfungsszenarien können Sie eine „Formularanforderung“ erstellen, um komplexere Logik zu verarbeiten. Formularanfragen sind benutzerdefinierte Anfrageklassen, die Validierungslogik enthalten. Die Formularanforderungsklasse kann mit dem Artisan-Befehl make:request erstellt werden:

php artisan make:request StoreBlogPost

Die neu generierte Klasse wird im Verzeichnis app/Http/Requests gespeichert. Wenn dieses Verzeichnis nicht existiert, wird es beim Ausführen des Befehls make:request erstellt. Fügen wir der rules-Methode einige Validierungsregeln hinzu:

/**
 * 获取适用于请求的验证规则。
 *
 * @return array
 */
 public function rules(){   
  return [       
    'title' => 'required|unique:posts|max:255',        
    'body' => 'required',    
    ];
  }

{tip} Sie können beliebige Abhängigkeiten an die rules-Methode übergeben. Sie werden automatisch durch den von Laravel bereitgestellten Service-Container gelöst.

Wie funktionieren Validierungsregeln? Alles, was Sie tun müssen, ist, die eingehende Anforderung in der Controller-Methode einzugeben. Validieren Sie die eingehende Formularanforderung, bevor Sie die Controller-Methode aufrufen. Das bedeutet, dass Sie keine Validierungslogik in den Controller schreiben müssen:

/**
 * 存储传入的博客文章。
 *
 * @param  StoreBlogPost  $request
 * @return Response
 */
 public function store(StoreBlogPost $request){   
  // 传入的请求通过验证...    
  // 获取通过验证的数据...    
  $validated = $request->validated();
 }

Wenn die Validierung fehlschlägt, wird eine Nachricht generiert, die den Benutzer zur vorherigen zurückführt Standortumleitungsantwort. Diese Fehler werden auch in session geflasht, damit sie auf der Seite angezeigt werden können. Wenn es sich bei der eingehenden Anfrage um AJAX handelt, wird eine HTTP-Antwort mit JSON-Daten mit einem 422-Statuscode und Validierungsfehlerinformationen an den Benutzer zurückgegeben.

Post-Formular-Anfrage-Hook hinzufügen

Wenn Sie einen Hook „nach“ der Formularanfrage hinzufügen möchten, können Sie die Methode withValidator verwenden. Diese Methode akzeptiert einen vollständigen Validierungskonstruktor, sodass Sie jede Methode aufrufen können, bevor das Validierungsergebnis zurückgegeben wird:

/**
 *  配置验证器实例。
 *
 * @param  \Illuminate\Validation\Validator  $validator
 * @return void
 */
 public function withValidator($validator){ 
    $validator->after(function ($validator) {        
         if ($this->somethingElseIsInvalid()) {           
              $validator->errors()->add('field', 'Something is wrong with this field!');        
             }   
         });
   }

Formularanforderungsautorisierungsvalidierung

Die Formularanforderungsklasse enthält auch die Methode authorize. Bei dieser Methode können Sie den authentifizierten Benutzer überprüfen, um festzustellen, ob er die Berechtigung zum Aktualisieren der angegebenen Ressource hat. Sie können beispielsweise feststellen, ob der Benutzer die Berechtigung zum Aktualisieren von Artikelkommentaren hat:

/**
 * 判断用户是否有权限做出此请求。
 *
 * @return bool
 */
 public function authorize(){  
   $comment = Comment::find($this->route('comment'));    
   return $comment && $this->user()->can('update', $comment);
 }

Da alle Formularanforderungen die Anforderungsbasisklasse in Laravel erben, können wir die Methode user verwenden, um die aktuelle Authentifizierung zu erhalten. Protokolliert im Benutzer. Beachten Sie auch den Aufruf der Methode route im obigen Beispiel. Mit dieser Methode können Sie die auf der aufgerufenen Route definierten URI-Parameter abrufen, z. B. den Parameter {comment} im folgenden Beispiel:

Route::post('comment/{comment}');

Wenn die Methode authorize false zurückgibt, wird automatisch a zurückgegeben Wenn eine HTTP-Antwort mit dem Statuscode 403 enthalten ist, wird die Controller-Methode nicht ausgeführt.

Wenn Sie vorhaben, die Autorisierungslogik in anderen Teilen der Anwendung zu verwalten, kehren Sie einfach authorize von der true-Methode zurück:

/**
 * 判断用户是否有权限进行此请求。
 *
 * @return bool
 */
 public function authorize(){  
   return true;
  }

{tip} Sie können <🎜 fragen > Methode, die alle erforderlichen Abhängigkeiten übergibt. Sie werden automatisch durch den von Laravel bereitgestellten Service-Container gelöst. authorize

Benutzerdefinierte Fehlermeldung

Sie können die Fehlermeldung anpassen, indem Sie die Methode messages der Formularanforderung überschreiben. Diese Methode sollte ein Array von Eigenschafts-/Regelpaaren und die entsprechenden Fehlermeldungen zurückgeben:

/**
 * 获取已定义验证规则的错误消息。
 *
 * @return array
 */
 public function messages(){  
   return [       
    'title.required' => 'A title is required',        
    'body.required'  => 'A message is required',    
    ];
  }

Benutzerdefinierte Validierungseigenschaften

Wenn Sie den :attribute-Teil der Validierungsnachricht durch einen benutzerdefinierten Eigenschaftsnamen ersetzen möchten, können Sie attributes überschreiben Methode zum Angeben eines benutzerdefinierten Namens. Diese Methode sollte ein Array von Eigenschafts-/Namenspaaren zurückgeben:

/**
 * 获取验证错误的自定义属性。
 *
 * @return array
 */
 public function attributes(){  
   return [      
     'email' => 'email address',    
     ];
   }

Erstellen Sie den Validator manuell

, wenn Sie dies nicht tun Wenn Sie die validate-Methode für die Anfrage nicht verwenden möchten, können Sie über die Validator-Fassade manuell ein Validatorbeispiel erstellen.
Verwenden Sie die Validator-Methode an der make-Fassade, um ein Validatorbeispiel zu erstellen:

<?php
   namespace App\Http\Controllers;use Validator;
   use Illuminate\Http\Request;
   use App\Http\Controllers\Controller;
   class PostController extends Controller{    
      /**
     * 保存一篇新的博客文章。
     *
     * @param  Request  $request
     * @return Response
     */   
    public function store(Request $request)   
     {       
      $validator = Validator::make($request->all(), [      
            'title' => 'required|unique:posts|max:255',            
            'body' => 'required',        
          ]);       
        if ($validator->fails()) {          
          return redirect('post/create')                       
           ->withErrors($validator)                        
           ->withInput();       
           }       
       // Store the blog post...  
        }
      }

Der erste an die make-Methode übergebene Parameter sind die Daten, die überprüft werden müssen. Der zweite Parameter ist die Validierungsregel für die Daten.

Wenn die Validierung fehlschlägt, können Sie die withErrors-Methode verwenden, um die Fehlermeldung an die Sitzung zu senden. Nach der Umleitung mit dieser Methode wird die Variable $errors automatisch mit der Ansicht geteilt und Sie können diese Nachrichten dem Benutzer anzeigen. Die withErrors-Methode akzeptiert einen Validator, MessageBag oder PHP Array .

Automatische Weiterleitung

Wenn Sie die Validatorinstanz manuell erstellen und die Methode validates verwenden möchten Wenn eine automatische Umleitung bereitgestellt wird, können Sie die validate-Methode im vorhandenen Validator-Beispiel aufrufen. Wenn die Überprüfung fehlschlägt, wird der Benutzer automatisch weitergeleitet. Bei einer AJAX-Anfrage wird eine JSON-formatierte Antwort zurückgegeben.

Validator::make($request->all(), [   
 'title' => 'required|unique:posts|max:255',    
 'body' => 'required',
])->validate();

Benanntes Fehlerpaket

Wenn Sie mehrere Formulare auf einer Seite haben, können Sie das Fehlerpaket benennen Rufen Sie die Fehlermeldung für ein bestimmtes Formular ab. Übergeben Sie der withErrors-Methode einfach einen Namen als zweites Argument

return redirect('register')          
  ->withErrors($validator, 'login');

und dann können Sie ihn von $errors abrufen Erhalten Sie die Fehlermeldung der angegebenen Form in einer Variablen:

{{ $errors->login->first('email') }}

Post-Validation-Hook

Der Validator auch ermöglicht Ihnen das Hinzufügen einer Rückruffunktion, die nach erfolgreicher Überprüfung zulässig ist, sodass Sie mit dem nächsten Schritt der Überprüfung fortfahren oder sogar weitere Fehlermeldungen zur Nachrichtensammlung hinzufügen können. Um es zu verwenden, verwenden Sie einfach die Methode after auf der Validierungsinstanz:

$validator = Validator::make(...);$validator->after(function ($validator) {   
 if ($this->somethingElseIsInvalid()) {     
    $validator->errors()->add('field', 'Something is wrong with this field!');   
     }
   });
 if ($validator->fails()) {  
   //
 }

Fehlermeldungen behandeln

Nachdem Sie die Validator-Methode auf der errors-Instanz aufgerufen haben, erhalten Sie eine IlluminateSupportMessageBag-Instanz, die über verschiedene praktische Methoden zur Behandlung von Fehlermeldungen verfügt. $ errors-Variablen werden automatisch für alle Ansichten bereitgestellt und sind auch eine Instanz der MessageBag-Klasse.

Erste Fehlermeldung für ein bestimmtes Feld anzeigen

Um die erste Fehlermeldung für ein bestimmtes Feld anzuzeigen, können Sie first verwenden Methode:

$errors = $validator->errors();echo $errors->first('email');

Alle Fehlermeldungen für ein bestimmtes Feld anzeigen

Wenn Sie ein Array aller Fehlermeldungen für ein bestimmtes Feld benötigen, können Sie die getMethode:

foreach ($errors->get('email') as $message) {  
  //
}

Wenn Sie ein Array-Feld eines Formulars validieren möchten, können Sie * verwenden So erhalten Sie alle Fehlermeldungen für jedes Array-Element:

foreach ($errors->get('attachments.*') as $message) { 
   //
}

Alle Fehlermeldungen für alle Felder anzeigen

Wenn Sie alle Fehlermeldungen für alle Felder erhalten möchten, können Sie dies tun Verwenden Sie all Methode:

foreach ($errors->all() as $message) { 
   //
}

Bestimmen Sie, ob ein bestimmtes Feld eine Fehlermeldung enthält

has Die Methode kann verwendet werden, um festzustellen, ob für ein bestimmtes Feld eine Fehlermeldung vorhanden ist:

if ($errors->has('email')) { 
   //
}

Benutzerdefinierte Fehlermeldung

Bei Bedarf können Sie zur Validierung auch benutzerdefinierte Fehlermeldungen anstelle der Standardwerte verwenden. Es gibt mehrere Möglichkeiten, eine benutzerdefinierte Nachricht anzugeben. Zunächst können Sie eine benutzerdefinierte Nachricht als dritten Parameter an die Methode Validator::make übergeben:

$messages = [  
  'required' => 'The :attribute field is required.',
 ];
 $validator = Validator::make($input, $rules, $messages);

In diesem Beispiel wird der Platzhalter :attribute durch den tatsächlichen Namen des Validierungsfelds ersetzt. Darüber hinaus können Sie in der Bestätigungsnachricht weitere Platzhalter verwenden. Beispiel:

$messages = [   
 'same'=> 'The :attribute and :other must match.',    
 'size'=> 'The :attribute must be exactly :size.',    
 'between' => 'The :attribute value :input is not between :min - :max.',    
 'in'=> 'The :attribute must be one of the following types: :values',
];

Geben Sie eine benutzerdefinierte Nachricht für eine bestimmte Eigenschaft an.

Manchmal möchten Sie möglicherweise eine Fehlermeldung nur für ein bestimmtes Feld anpassen. Verwenden Sie einfach die „Punkt“-Syntax nach dem Attributnamen, um die Validierungsregeln anzugeben:

$messages = [ 
   'email.required' => 'We need to know your e-mail address!',
 ];

Anpassung in der Sprachdatei Defining Messages angeben

In den meisten Fällen werden Sie wahrscheinlich benutzerdefinierte Nachrichten in einer Sprachdatei angeben, anstatt sie direkt an diese zu übergeben Validator. Platzieren Sie dazu Ihre Nachricht im Array resources/lang/xx/validation.php innerhalb der Sprachdatei custom.

'custom' => [  
  'email' => [    
      'required' => 'We need to know your e-mail address!',  
      ],
    ],

Benutzerdefiniertes Attribut in der Sprachdatei angeben

Wenn Sie den :attribute-Platzhalter der Validierungsnachricht durch einen benutzerdefinierten Attributnamen ersetzen möchten, können Sie dies in <🎜 tun > resources/lang/xx/validation.php der Sprachdatei Geben Sie einen benutzerdefinierten Namen im Array an: attributes

'attributes' => [  
  'email' => 'email address',
 ],

Benutzerdefinierte Werte in Sprachdateien angeben

Manchmal kann es erforderlich sein, den :value-Platzhalter der Validierungsnachricht durch einen benutzerdefinierten Text für den Wert zu ersetzen. Wenn der Wert von payment_type beispielsweise cc ist, verwenden Sie die folgende Validierungsregel, die angibt, dass eine Kreditkartennummer erforderlich ist:

$request->validate([  
  'credit_card_number' => 'required_if:payment_type,cc'
 ]);

Wenn diese Validierungsregel fehlschlägt, wird die folgende Fehlermeldung erzeugt :

    当payment type为cc时,credit card number 不能为空。

Sie können eine benutzerdefinierte Wertdarstellung in der values-Sprachdatei angeben, indem Sie ein validation-Array definieren, anstatt cc anzuzeigen Als Zahlungsartwert:

'values' => [ 
   'payment_type' => [    
       'cc' => '信用卡' 
        ],
    ],

Wenn nun die Validierungsregel fehlschlägt, wird die folgende Meldung ausgegeben:

    当payment type 为信用卡时,credit card number不能为空。

Verfügbare Validierungsregeln

Im Folgenden finden Sie eine Liste aller verfügbaren Validierungsregeln und ihrer Funktionalität:

Das Validierungsfeld

akzeptiert

muss Ja, Ein, 1 oder Wahr sein. Dies ist nützlich, wenn Sie bestätigen möchten, ob Sie mit den Nutzungsbedingungen einverstanden sind.

active_url

Gemäß der PHP-Funktion dns_get_record muss das Validierungsfeld ein gültiges A oder AAAA haben aufzeichnen.

nach:Datum

Das Validierungsfeld muss ein Wert nach dem angegebenen Datum sein . Der Datumswert wird an die PHP-Funktion strtotime übergeben:

'start_date' => 'required|date|after:tomorrow'

Anstatt das Feld zu übergeben, das mit dem Datum verglichen werden soll, können Sie mit strtotime ein anderes Feld angeben, mit dem verglichen werden soll Verarbeitete Datumszeichenfolge:

'finish_date' => 'required|date|after:start_date'

after_or_equal:date

Das Validierungsfeld muss A sein Wert nach oder gleich dem angegebenen Datum. Weitere Informationen finden Sie in der Regel nachher.

Alpha

Das Validierungsfeld muss vollständig aus Buchstaben bestehen.

alpha_dash

Validierungsfelder können Buchstaben, Zahlen sowie Bindestriche (-) und Unterstriche (_) enthalten. ).

alpha_num

Das Validierungsfeld muss vollständig aus Buchstaben und Zahlen bestehen.

Array

Das zu validierende Feld muss ein PHP-Array sein.

Bail

Hört die Ausführung von Validierungsregeln nach dem ersten Validierungsfehler auf.

vor:Datum

Das Validierungsfeld muss vor dem angegebenen Datum liegen. Dieser Datumswert wird zur Berechnung an die PHP-Funktion strtotime übergeben.

before_or_equal:date

Das Validierungsfeld muss vor oder mit dem angegebenen Datum liegen das gleiche Datum. Dieser Datumswert wird zur Berechnung an die PHP-Funktion strtotime übergeben.

zwischen:min,max

Validierungsfeld Das Die Größe muss innerhalb der angegebenen min liegen Zwischen max. Strings, Zahlen, Arrays und Dateien werden mit der Methode size berechnet.

boolean

Validierte Felder müssen in den booleschen Typ konvertierbar sein. Akzeptable Eingaben sind true, false, 1, 0, "1" und "0".

bestätigt

Das Validierungsfeld muss ein passendes Feld foo_confirmation haben. Wenn das Validierungsfeld beispielsweise password ist, muss in der Eingabe ein passendes password_confirmation-Feld vorhanden sein.

Datum

Gemäß der PHP-Funktion strtotime muss das Validierungsfeld ein gültiges Datum sein.

date_equals:date

Das Validierungsfeld muss mit dem angegebenen Datum übereinstimmen. Das Datum wird an die PHP-Funktion strtotime übergeben.

Datumsformat:Format

Das Validierungsfeld muss mit dem angegebenen Datumsformat übereinstimmen. Wenn Sie ein Feld validieren, sollten Sie nur date oder date_format verwenden, nicht beides.

anders:Feld

Das Validierungsfeld muss den gleichen Wert haben wie Feld verschiedene Werte.

Ziffern:Wert

Das Validierungsfeld muss numerisch<🎜 sein > und muss die exakte Länge von _value_ haben.

digits_between:

min,max

Validierte Felder Die Die Länge muss innerhalb der angegebenen

min liegen und max.

Abmessungen

Die zu überprüfende Datei muss ein Bild sein und den angegebenen Regeleinschränkungen entsprechen:

'avatar' => 'dimensions:min_width=100,min_height=200'

Die verfügbaren Einschränkungen sind:

min_width, max_width, min_height, max_height, width, height, ratio.

Verhältnis Der Grenzwert sollte als Breite geteilt durch Höhe ausgedrückt werden. Dies kann durch die Verwendung eines Ausdrucks wie oder eines Floats wie 3/2 angegeben werden: 1.5

'avatar' => 'dimensions:ratio=3/2'

Da diese Regel mehrere Argumente erfordert, können Sie

verwenden Die Methode erstellt fließend Regeln: Rule::dimensions

use Illuminate\Validation\Rule;
Validator::make($data, [  
  'avatar' => [     
     'required',        
     Rule::dimensions()->maxWidth(1000)->maxHeight(500)->ratio(3 / 2),    
   ],
  ]);

distinct

Bei der Validierung eines Arrays darf das Validierungsfeld keine Duplikate enthalten Werte .

'foo.*.id' => 'distinct'

E-Mail

Das Validierungsfeld muss eine ordnungsgemäß formatierte E-Mail-Adresse sein.

existiert:Tabelle,Spalte

Validierungsfelder müssen in der angegebenen Datenbanktabelle vorhanden sein.

Exists Rule Basic Usage

'state' => 'exists:states'

Wenn die Option column nicht angegeben ist, wird der Feldname verwendet.

Benutzerdefinierte Tabellenfelder angeben

'state' => 'exists:states,abbreviation'

Manchmal müssen Sie möglicherweise eine bestimmte Datenbankverbindung angeben, die für „exists“-Abfragen verwendet werden soll. Sie können dies tun, indem Sie den Verbindungsnamen mit der „Punkt“-Syntax zum Tabellennamen hinzufügen:

'email' => 'exists:connection.staff,email'

Wenn Sie die von der Validierungsregel durchgeführte Abfrage anpassen möchten, können Sie die Klasse Rule verwenden, um die zu definieren fließend regieren. Im folgenden Beispiel geben wir die Validierungsregeln auch als Array an, anstatt sie mit dem Zeichen | zu trennen:

use Illuminate\Validation\Rule;
Validator::make($data, [  
  'email' => [      
    'required',        
    Rule::exists('staff')->where(function ($query) {  
           $query->where('account_id', 1);    
        }),
     ],
  ]);

Datei

Das zu überprüfende Feld muss eine erfolgreich hochgeladene Datei sein.

ausgefüllt

Validierungsfeld darf nicht leer sein, wenn es vorhanden ist.

gt:Feld

Das Validierungsfeld muss größer als das angegebene <🎜 sein >Feld . Beide Felder müssen vom gleichen Typ sein. Zeichenfolgen, Zahlen, Arrays und Dateien werden mit alle identisch ausgewertet. size

gte:

Feld

Validierungsfeld muss größer oder gleich dem angegebenen Wert sein

Feld. Beide Felder müssen vom gleichen Typ sein. Zeichenfolgen, Zahlen, Arrays und Dateien werden mit alle identisch ausgewertet. size

Bild

Die verifizierte Datei muss ein Bild sein (JPEG, PNG, BMP, GIF oder svg)

in:

foo,bar,...

Validierungsfelder müssen in der angegebenen Werteliste enthalten sein. Da diese Regel normalerweise erfordert, dass Sie ein Array

erstellen, können Sie implode verwenden Methoden erstellen fließend Regeln: Rule :: in

use Illuminate\Validation\Rule;
Validator::make($data, [  
  'zones' => [      
    'required',        
    Rule::in(['first-zone', 'second-zone']),  
   ],
]);

in_array:

anotherfield

Die zu validierenden Felder sind erforderlich. Existiert im Wert eines anderen Feldes

anotherfield.

Ganzzahl

Das zu überprüfende Feld muss eine Ganzzahl sein.

ip

Das zu überprüfende Feld muss eine IP-Adresse sein.

ipv4

Das zu überprüfende Feld muss eine IPv4-Adresse sein.

ipv6

Das zu überprüfende Feld muss eine IPv6-Adresse sein.

json

Das zu überprüfende Feld muss eine gültige JSON-Zeichenfolge sein.

lt:Feld

Das zu validierende Feld muss kleiner als das angegebene Feld sein . Beide Felder müssen vom gleichen Typ sein. String-, numerische, Array- und Dateigrößen werden mit der Methode size berechnet und ausgewertet.

lte:field

Das zu validierende Feld muss kleiner oder gleich sein das angegebene Feld. Beide Felder müssen vom gleichen Typ sein. String-, numerische, Array- und Dateigrößen werden mit der Methode size berechnet und ausgewertet.

max:Wert

Felder in der Validierung müssen kleiner oder gleich < sein 🎜>Wert. Strings, Zahlen, Arrays oder Dateigrößenberechnungen werden mit der Methode ausgewertet. size

Mimetypen:

text/plain,...

Verifizierte Dateien müssen mit Übereinstimmungen übereinstimmen einer der angegebenen MIME-Typen:

'video' => 'mimetypes:video/avi,video/mpeg,video/quicktime'

Um die hochgeladene Datei zu ermitteln Beim MIME-Typ wird der Inhalt der Datei gelesen, um den MIME-Typ zu ermitteln, der sich vom vom Client bereitgestellten MIME-Typ unterscheiden kann.

Mime:

foo,bar,...

Verifizierte Dateien müssen einen MIME-Typ haben, der einer der aufgeführten Erweiterungen entspricht.

Grundlegende Verwendung von MIME-Regeln

'photo' => 'mimes:jpeg,bmp,png'

Auch wenn Sie möglicherweise nur die angegebene Erweiterung überprüfen müssen, überprüft diese Regel tatsächlich den MIME-Typ der Datei, indem sie die Datei liest Inhalt, um seinen MIME-Typ zu erraten.

Das vollständige MIME finden Sie unter folgendem Link Liste der Typen und ihrer entsprechenden Erweiterungen:


https://svn.apache.org/repos/asf/httpd/htt...

min:

Wert

Felder in der Validierung müssen einen Mindestwert haben. Strings, Zahlen, Arrays oder Dateigrößenberechnungen werden mit der Methode

size ausgewertet.

not_in:

foo,bar,...

Das zu validierende Feld kann nicht in die angegebene Werteliste aufgenommen werden. Mit der

-Methode können Regeln erstellt werden: Rule::notIn

use Illuminate\Validation\Rule;
Validator::make($data, [  
  'toppings' => [     
     'required',        
     Rule::notIn(['sprinkles', 'cherries']), 
     ],
 ]);

not_regex:Muster

Die zu validierenden Felder dürfen nicht mit dem angegebenen regulären Ausdruck übereinstimmen.

Intern verwendet diese Regel PHP-preg_match-Funktionen. Der eingegebene Wert sollte dem gleichen Format folgen, das für die Funktion preg_match erforderlich ist, also auch gültige Trennzeichen enthalten. Zum Beispiel: 'email' => 'not_regex:/^. $/i'.

Hinweis: Bei Verwendung des regex/not_regex-Musters kann es erforderlich sein, die Regeln in einem Array anzugeben, anstatt Pipe-Trennzeichen zu verwenden, insbesondere wenn der reguläre Ausdruck Pipe enthält Zeichen Fall.

nullable

Das validierte Feld kann null sein. Dies ist besonders nützlich bei der Validierung grundlegender Datentypen wie Zeichenfolgen und Ganzzahlen, die Nullwerte enthalten können.

numerisch

Das zu validierende Feld muss numerisch sein.

vorhanden

Das zu validierende Feld muss in den Eingabedaten vorhanden sein, kann aber leer sein.

Regex:Muster

Das zu validierende Feld muss mit dem angegebenen regulären Ausdruck übereinstimmen übereinstimmen.

Intern verwendet diese Regel PHP-preg_match-Funktionen. Der eingegebene Wert sollte dem gleichen Format folgen, das für die Funktion preg_match erforderlich ist, also auch gültige Trennzeichen enthalten. Zum Beispiel: 'email' => 'regex:/^. @. $/i'.

Hinweis: Wenn Sie die Regel regex verwenden, müssen Sie ein Array anstelle des Trennzeichens | verwenden, insbesondere wenn der reguläre Ausdruck das Zeichen | enthält.

erforderlich

Das zu validierende Feld muss in den Eingabedaten vorhanden sein und darf nicht leer sein. Ein Feld gilt als „leer“, wenn eine der folgenden Bedingungen erfüllt ist:

  • hat den Wert null.
  • value ist eine leere Zeichenfolge. Der
  • -Wert ist ein leeres Array oder ein leeres Countable-Objekt.
  • Der Wert ist die hochgeladene Datei ohne Pfad.

erforderlich_wenn:ein anderes Feld,Wert,.. .

wenn Das Feld anotherfield entspricht jedem Wert und das zu überprüfende Feld muss vorhanden und darf nicht leer sein.

Wenn Sie eine komplexere Bedingung für die required_if-Regel erstellen möchten, können Sie die Rule::requiredIf-Methode verwenden. Diese Methode akzeptiert einen booleschen Wert oder Abschluss. Beim Übergeben eines Abschlusses sollte true oder false zurückgegeben werden, um zu bestätigen, ob das Feld validiert werden muss:

use Illuminate\Validation\Rule;
Validator::make($request->all(), [  
  'role_id' => Rule::requiredIf($request->user()->is_admin),]);
  Validator::make($request->all(), [   
   'role_id' => Rule::requiredIf(function () use ($request) {     
      return $request->user()->is_admin;   
      }),
    ]);

required_unless:anotherfield,value,...

wenn das Feld anotherfield keinem der entspricht value , das zu überprüfende Feld muss vorhanden und darf nicht leer sein.

required_with:foo,bar,...

Das validierte Feld muss vorhanden sein und darf nur dann leer sein, wenn eines der anderen angegebenen Felder vorhanden ist.

required_with_all:foo,bar,...

Das validierte Feld muss erscheinen und darf nur dann leer sein, wenn alle anderen angegebenen Felder erscheinen.

erforderlich_ohne:foo,bar,...

Das validierte Feld muss nur dann angezeigt werden und darf nicht leer sein, wenn kein anderes angegebenes Feld angezeigt wird.

required_without_all:foo,bar,...

Das überprüfte Feld muss angezeigt werden und darf nur dann leer sein, wenn alle anderen angegebenen Felder nicht angezeigt werden.

gleich:Feld

Das zu validierende Feld muss mit dem angegebenen Feld übereinstimmen.

Größe:Wert

Das zu validierende Feld muss einen Wert haben, der mit dem übereinstimmt gegebener Wert Größe. Bei Zeichenfolgen entspricht der Wert der Anzahl der Zeichen. Bei Zahlen entspricht der Wert dem angegebenen ganzzahligen Wert. Bei Arrays entspricht die Größe dem count-Wert des Arrays. Bei Dateien entspricht die Größe der Dateigröße in KB.

starts_with:foo,bar,...

Das zu validierende Feld muss mit einem der angegebenen Werte beginnen.

Zeichenfolge

Das zu überprüfende Feld muss eine Zeichenfolge sein. Wenn dieses Feld null sein darf, muss diesem Feld die nullable-Regel zugewiesen werden.

Zeitzone

Das zu validierende Feld muss eine gültige Zeitzonenkennung basierend auf der PHP-Funktion sein timezone_identifiers_list.

unique:table,column,außer,idColumn

Felder, die in der angegebenen Datenbank validiert werden sollen Muss in der Tabelle eindeutig sein. Wenn column nicht angegeben ist, wird der Name des Feldes selbst verwendet.

Benutzerdefinierte Felder angeben

'email' => 'unique:users,email_address'

Benutzerdefinierte Datenbankverbindung

Manchmal muss möglicherweise die Datenbank für die Validator-Abfrageeinstellungen erstellt werden für individuelle Verbindungen. Im obigen Beispiel entspricht das Festlegen von unique:users als Validierungsregel der Verwendung der Standarddatenbankverbindung zum Abfragen der Datenbank. Wenn Sie es ändern möchten, verwenden Sie die „Punkt“-Methode, um die Verbindung und den Tabellennamen anzugeben:

'email' => 'unique:connection.users,email_address'

Erzwingen Sie, dass die Unique-Regel die angegebene ID ignoriert:

Manchmal möchten Sie möglicherweise die angegebene ID ignorieren, wenn Sie die Eindeutigkeit des Felds überprüfen. Die Seite „Profil aktualisieren“ enthält beispielsweise Ihren Benutzernamen, Ihre E-Mail-Adresse und Ihren Standort. An dieser Stelle möchten Sie überprüfen, ob der aktualisierte E-Mail-Wert eindeutig ist. Wenn der Benutzer nur das Feld „Benutzername“, nicht aber das E-Mail-Feld ändert, besteht keine Notwendigkeit, einen Validierungsfehler auszulösen, da der Benutzer bereits Eigentümer der E-Mail ist.

Verwenden Sie die Klasse Rule, um Regeln zu definieren, um den Validator anzuweisen, die Benutzer-ID zu ignorieren. In diesem Beispiel werden Validierungsregeln als Array angegeben, anstatt |-Zeichen zu verwenden, um sie zu trennen:

use Illuminate\Validation\Rule;
Validator::make($data, [ 
   'email' => [      
     'required',        
     Rule::unique('users')->ignore($user->id),  
     ],
 ]);

{tip} Sie sollten niemals benutzergesteuerte Anforderungseingaben an die ignore-Methode übergeben. Stattdessen sollten Sie nur vom System generierte eindeutige IDs, wie z. B. Auto-Inkrement-IDs oder UUIDs, von Eloquent-Modellinstanzen übergeben. Andernfalls ist Ihre Anwendung anfällig für SQL-Injection-Angriffe.

Anstatt den Wert des Modellschlüssels an die ignore-Methode zu übergeben, können Sie die gesamte Modellinstanz übergeben. Laravel extrahiert automatisch den Primärschlüssel aus dem Modell:

Rule::unique('users')->ignore($user)

Wenn Ihre Datentabelle einen anderen Primärschlüsselnamen als id verwendet, geben Sie beim Aufruf der Methode ignore den Namen des Felds an:

Rule::unique('users')->ignore($user->id, 'user_id')

Standardmäßig prüft die unique-Regel, ob Spalten, die mit dem Namen der zu validierenden Eigenschaft übereinstimmen, eindeutig sind. Sie können jedoch einen anderen Spaltennamen als zweites Argument an die unique-Methode übergeben:

Rule::unique('users', 'email_address')->ignore($user->id),

Fügen Sie eine zusätzliche Where-Anweisung hinzu:

Sie können auch < 🎜 übergeben >-Methode gibt zusätzliche Abfragebedingungen an. Zum Beispiel fügen wir where als Einschränkung für account_id hinzu: 1

'email' => Rule::unique('users')->where(function ($query) {  
  return $query->where('account_id', 1);
})

url

Das Feld Zur Validierung muss es sich um eine gültige URL handeln.

uuid

Das Validierungsfeld muss gültig sein. RFC 4122 (Version 1, 3, 4 oder 5) generisch Eindeutig Bezeichner (UUID).

Regeln basierend auf Bedingungen hinzufügen

Validieren, falls vorhanden

In einigen Fällen können Validierungsprüfungen nur für ein Feld durchgeführt werden, wenn im Array vorhanden ist. Dies kann durch Hinzufügen von sometimes zur Regelliste erreicht werden:

$v = Validator::make($data, [    'email' => 'sometimes|required|email',]);

Im obigen Beispiel wird das Feld email nur validiert, wenn es im Array $data vorhanden ist.

{Tipp} Wenn Sie versuchen, ein Feld zu validieren, das immer vorhanden sein sollte, aber möglicherweise leer ist, lesen Sie bitte die Hinweise zu optionalen Feldern

Komplexe bedingte Validierung

Manchmal müssen Sie möglicherweise Validierungsregeln hinzufügen, die auf einer komplexeren bedingten Logik basieren. Beispielsweise möchten Sie möglicherweise, dass ein bestimmtes Feld nur dann erforderlich ist, wenn der Wert eines anderen Felds 100 überschreitet. Oder wenn ein bestimmtes Feld vorhanden ist, können die anderen beiden Felder den angegebenen Wert haben. Das Hinzufügen solcher Überprüfungsbedingungen ist nicht schwierig. Erstellen Sie zunächst eine Instanz von Validator mithilfe einer statischen Regel:

$v = Validator::make($data, [  
  'email' => 'required|email',    
  'games' => 'required|numeric',
]);

Nehmen wir an, wir haben eine Webanwendung, die für Spielesammler entwickelt wurde. Wenn ein Spielesammler mehr als hundert Spiele besitzt, möchten wir ihn bitten, zu erklären, warum er so viele Spiele besitzt. Sie könnten beispielsweise einen Spielevertrieb betreiben oder einfach nur Spaß am Sammeln haben. Um diese Validierungsanforderung unter bestimmten Bedingungen hinzuzufügen, können Sie die Validator-Methode für die sometimes-Instanz verwenden.

$v->sometimes('reason', 'required|max:500', function ($input) {  
  return $input->games >= 100;
});

Der erste Parameter, der an die sometimes-Methode übergeben wird, ist der Feldname, der für die Validierung verwendet werden soll. Der zweite Parameter ist die Validierungsregel, die wir verwenden möchten. 闭包 wird als dritter Parameter übergeben. Wenn true zurückgegeben wird, werden zusätzliche Regeln hinzugefügt. Mit dieser Methode ist es einfach, komplexe bedingte Validierungen zu erstellen. Sie können sogar mehreren Feldern gleichzeitig eine bedingte Validierung hinzufügen:

$v->sometimes(['reason', 'cost'], 'required', function ($input) {   
   return $input->games >= 100;
 });

{tip} Das an 闭包 übergebene Argument $input ist eine Instanz von IlluminateSupportFluent und kann für den Zugriff auf Ihre Eingabe verwendet werden oder Dateiobjekt.

Arrays validieren

Es ist nicht schwierig, Felder zu validieren, bei denen die Eingabe des Formulars eine ist Array. Sie können die „Punkt“-Methode verwenden, um Eigenschaften in einem Array zu validieren. Wenn die eingehende HTTP-Anfrage beispielsweise das Feld photos[profile] enthält, kann es wie folgt überprüft werden:

$validator = Validator::make($request->all(), [  
  'photos.profile' => 'required|image',
]);

Sie können auch jedes Element im Array überprüfen. Um beispielsweise zu überprüfen, ob jede E-Mail im angegebenen Array-Eingabefeld eindeutig ist, können Sie Folgendes tun:

$validator = Validator::make($request->all(), [  
  'person.*.email' => 'email|unique:users',    
  'person.*.first_name' => 'required_with:person.*.last_name',
]);

Ebenso können Sie * verwenden, wenn Sie Verifizierungsinformationen in der Sprachdatei definieren Zeichen verwenden Sie eine einzelne Validierungsnachricht für Array-basierte Felder:

'custom' => [  
  'person.*.email' => [    
      'unique' => 'Each person must have a unique e-mail address',   
     ]
    ],

Benutzerdefinierte Validierungsregel

Verwendung von Regelobjekten

Laravel bietet viele nützliche Validierungsregeln und unterstützt auch benutzerdefinierte Regeln. Eine Möglichkeit, benutzerdefinierte Validierungsregeln zu registrieren, ist die Verwendung eines Regelobjekts. Neue Regelobjekte können mit dem Artisan-Befehl make:rule generiert werden. Als Nächstes verwenden wir diesen Befehl, um eine Regel zu generieren, die überprüft, ob eine Zeichenfolge in Großbuchstaben geschrieben ist. Laravel speichert neue Regeln im Verzeichnis app/Rules:

php artisan make:rule Uppercase

Sobald die Regel erstellt ist, können wir ihr Verhalten definieren. Das Regelobjekt enthält zwei Methoden: passes und message. Die passes-Methode empfängt den Attributwert und -namen und gibt true oder false zurück, je nachdem, ob der Attributwert den Regeln entspricht. Die message-Methode sollte die Validierungsfehlermeldung zurückgeben, die verwendet werden soll, wenn die Validierung fehlschlägt:

<?php
  namespace App\Rules;
  use Illuminate\Contracts\Validation\Rule;
  class Uppercase implements Rule{   
        /**
     * 判断验证规则是否通过。
     *
     * @param  string  $attribute
     * @param  mixed  $value
     * @return bool
     */   
    public function passes($attribute, $value)   
     {       
       return strtoupper($value) === $value;   
      }   
     /**
     * 获取验证错误消息。
     *
     * @return string
     */   
    public function message()  
      {       
       return 'The :attribute must be uppercase.';   
       }
      }

Wenn Sie natürlich eine Fehlermeldung aus der Übersetzungsdatei zurückgeben möchten, können Sie die Hilfsfunktion über aufrufen message Methode trans:

/**
 * 获取验证错误消息。
 *
 * @return string
 */
 public function message(){  
   return trans('validation.uppercase');
  }

Sobald das Regelobjekt definiert ist, können Sie eine Instanz des Regelobjekts zusammen mit anderen Validierungsregeln an den Validator übergeben:

use App\Rules\Uppercase;$request->validate([  
  'name' => ['required', 'string', new Uppercase],
]);

Abschlüsse verwenden

Wenn Sie die Funktionalität benutzerdefinierter Regeln nur einmal in Ihrer Anwendung benötigen, können Sie stattdessen Abschlüsse verwenden. Keine Regel Objekt. Der Abschluss erhält den Namen des Attributs, dessen Wert bei fehlgeschlagener Validierung $fail im Callback verwendet werden soll:

$validator = Validator::make($request->all(), [   
 'title' => [      
   'required',        
   'max:255',        
   function ($attribute, $value, $fail) {          
     if ($value === 'foo') {              
       $fail($attribute.' is invalid.');      
             }      
            },    
          ],
        ]);

Verwenden der Erweiterung

Eine andere Möglichkeit, benutzerdefinierte Validierungsregeln zu registrieren, ist die Verwendung der Validator-Fassade extend Methode. Verwenden wir diese Methode, um benutzerdefinierte Validierungsregeln im Service-Container zu registrieren:

<?php
  namespace App\Providers;
  use Illuminate\Support\ServiceProvider;
  use Illuminate\Support\Facades\Validator;
  class AppServiceProvider extends ServiceProvider{   
      /**
     * 引导任何应用程序。
     *
     * @return void
     */   
  public function boot()   
   {       
     Validator::extend('foo', function ($attribute, $value, $parameters, $validator) { 
        return $value == 'foo';  
         });   
       }    
     /**
     * 注册服务提供器。
     *
     * @return void
     */   
     public function register()   
      {       
       //   
       }
     }

Der benutzerdefinierte Validierungsabschluss erhält vier Parameter: den Namen des zu überprüfenden Attributs $attribute, den Wert des Attributs $value , das an die Validierungsregel übergebene Parameterarray $parameters und die tatsächliche Spalte Validator.

Neben der Verwendung von Abschlüssen können Sie auch Klassen und Methoden an die extend-Methode übergeben:

Validator::extend('foo', 'FooValidator@validate');

Fehlermeldungen definieren

Sie auch Für benutzerdefinierte Regeln müssen Fehlermeldungen definiert werden. Sie können diese Funktionalität erreichen, indem Sie ein benutzerdefiniertes Inline-Nachrichtenarray verwenden oder einen Eintrag in der Validierungssprachendatei hinzufügen. Die Nachricht sollte an erster Stelle im Array platziert werden, nicht im Array custom, das nur zum Speichern attributspezifischer Fehlermeldungen verwendet wird:

"foo" => "Your input was invalid!",
"accepted" => "The :attribute must be accepted.",
// 其余的验证错误消息...

Beim Erstellen einer benutzerdefinierten Validierungsregel müssen Sie möglicherweise manchmal benutzerdefinierte Platzhalter definieren für Fehlermeldungen. Dies kann durch Erstellen eines benutzerdefinierten Validators und anschließenden Aufruf der Validator-Methode an der replacer-Fassade erfolgen. Sie können die folgenden Vorgänge in der boot-Methode des Service-Containers ausführen:

/**
 * 启动应用程序。
 *
 * @return void
 */
 public function boot(){  
   Validator::extend(...);    
   Validator::replacer('foo', function ($message, $attribute, $rule, $parameters) {    
       return str_replace(...);  
      });
 }

Implizite Erweiterung

Wenn das zu überprüfende Attribut nicht vorhanden ist oder einen durch die required-Regel definierten Nullwert enthält, gelten standardmäßig die normalen Validierungsregeln, einschließlich self The Definitionserweiterung wird nicht ausgeführt. Beispielsweise validiert die unique-Regel den null-Wert nicht:

$rules = ['name' => 'unique'];
$input = ['name' => null];
Validator::make($input, $rules)->passes();
 // true

Wenn Sie verlangen, dass eine Eigenschaft validiert wird, auch wenn sie leer ist, müssen Sie implizieren, dass die Eigenschaft ist erforderlich. Um eine solche „implizite“ Erweiterung zu erstellen, verwenden Sie die Methode Validator::extendImplicit():

Validator::extendImplicit('foo', function ($attribute, $value, $parameters, $validator) { 
   return $value == 'foo';
  });

{note} Eine „implizite“ Erweiterung impliziert nur, dass die Eigenschaft erforderlich ist. Ob es fehlt oder null ist, liegt bei Ihnen.

Dieser Artikel wurde zuerst auf der Website LearnKu.com veröffentlicht.