2016-02-04 10 views
7

Ich versuche, ein Kennwortfeld nur zu validieren, wenn es vorhanden ist. Ich möchte zulassen, dass jemand einen Benutzer bearbeitet und das Benutzerkennwort ändern kann oder auch nicht. Also dachte ich mir, dass ich Laravels Validierungsregeln verwenden könnte, speziell die "manchmal" -Regel. Ich habe diesen Satz von Regeln:Laravel manchmal Validierungsregel

$this->validate($request, [ 
    'password' => 'sometimes|required|min:8', 
]); 

Dieser für das Beispiel vereinfacht wird, wird es in der Regel andere Regeln für andere Bereiche sein und strengere Regeln für das Passwort. Ich erwarte, dass dies nur die min: 8-Regel anwendet, wenn das Passwort-Feld in den übergebenen Daten vorhanden ist, aber wenn ich das Passwort-Feld leer lasse, bekomme ich einen Validierungsfehler, der besagt, dass das Passwort-Feld benötigt wird.

Ich bin mir nicht sicher, was ich in den Dokumenten nicht verstehe. Muss ich das Passwortfeld vor der Validierung manuell entfernen, wenn die Formulareingabe so leer übergeben wurde?

$data = $request->all(); 

if ('' === $data['password']) { 
    unset($data['password']) 
} 

... und dann das Array in den Validator geben. Ich denke, das macht Sinn, aber ich könnte mit einiger Bestätigung tun, dass ich es richtig verstehe. Danke im Voraus.

+0

Von der Docs, das verstehe ich. Also, im Grunde bist du gut zu gehen, es sei denn, jemand sagt etwas anderes. –

+0

Es scheint auch, dass, wenn Sie die erforderliche Regel entfernen, es funktioniert wie folgt: 'manchmal | min: 8 .....', aber die Dokumente machen dies nicht wirklich deutlich. – Steven1978

+0

Yup. das dachte ich zuerst und überprüfte dann noch einmal die Dokumente. : D –

Antwort

6

Docs machen es nicht klar, aber Entfernen erforderlich macht es funktioniert.

$this->validate($request, [ 
    'password' => 'sometimes|min:8', 
]); 
+0

Scheint wirklich offensichtlich, aber die Dokumente leiten Sie weg von der Lösung. Danke für die Hilfe :). – Steven1978

+0

Yup, tat es auf Code, aber wurde verwirrt, Dokumente zu sehen. froh könnte helfen :) –

+0

Verstehe ich das richtig? Die Regel "Manchmal" bedeutet, dass die Eingabe optional ist. – TheCrazyProfessor

10

Ich denke, wir sollten Laravel erzählen Wenn das Passwort nicht leer ist, legen Sie die Regeln sonst nichts tun.

$this->validate($request, [ 
    'password' => $request->password != null ?'sometimes|required|min:8': '' 
]); 
+0

"Im obigen Beispiel wird das Passwortfeld nur validiert, wenn es im $ data-Array vorhanden ist". aus der Dokumentation –

+0

@nbin Könnten Sie es referenzieren? –

+0

Könnten Sie bitte die Dokumente sehen? –

3

Ich denke es ist im Allgemeinen sicherer, dem Benutzer zu erlauben, sein Kennwort nur zu ändern, wenn er das alte zur Verfügung stellen kann.

Es kann ein Sicherheitsproblem sein, dem verbundenen Benutzer zu erlauben, sein Passwort zu ändern, ohne das alte Passwort anzugeben.

Dies ist im Allgemeinen, wie ich Benutzer-Passwort ändern mit Laravel erlauben:

$this->validate($request, [ 
      'user.old_password' => [], 
      'user.password' => [ 
       'required_with:user.old_password', 
       'min:6', 
       'confirmed', 
       'regex:/^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*([[email protected]#$%^&*.,;?])).+$/', 
       'different:user.old_password' 
      ], 
      'user.password_confirmation' => ['required_with:user.password'], 
     ]); 

Diese validiere nicht das alte Passwort, wie wir es für uns nicht kümmern, wird die Datenbank überprüfen, aber ich bestätigen die Neues Passwort nur, wenn das alte Passwort angegeben ist.

2

Im Bearbeitungsmodus können Sie Passwort-Feld füllen, indem sie zum Beispiel „********“ und im Update-Modus wie diese Prüfung

$this->validate($request, [ 
    'password' => 'required|min:8', 
]); 

und in der Steuerung zu validieren $data['password']='********' altes Passwort finden und

$data['password']='old password in db' 

und $data['password']!='********' Update pssword

Verwandte Themen