Heim > Artikel > Web-Frontend > Extraktion des Formularvalidierungsobjekts und der Authentifizierungsklasse
In unserem vorherigen Projekt haben wir gelernt, wie man einen registrierten Benutzer anmeldet oder abmeldet. Aber heute lernen wir, wie man ein Formularvalidierungsobjekt extrahiert und wie man die Klassenextraktion im Projekt authentifiziert.
Um das Projekt zu starten, müssen wir ein neues Verzeichnis namens Http hinzufügen und dann die Controller in dieses neue Verzeichnis verschieben. Als nächstes müssen wir ein weiteres neues Verzeichnis in Http mit dem Namen „Forms“ hinzufügen und in diesem Verzeichnis eine neue Datei „LoginForm“ hinzufügen. Dann müssen wir das Projekt ausführen, das einen Fehler anzeigt, da die Controller in ein neues Verzeichnis verschoben wurden und ihre Routen in „routes.php“ aktualisiert werden müssen.
$router->get('/', 'index.php'); $router->get('/about', 'about.php'); $router->get('/contact', 'contact.php'); $router->get('/notes', 'notes/index.php')->only('auth'); $router->get('/note', 'notes/show.php'); $router->delete('/note', 'notes/destroy.php'); $router->get('/note/edit', 'notes/edit.php'); $router->patch('/note', 'notes/update.php'); $router->get('/notes/create', 'notes/create.php'); $router->post('/notes', 'notes/store.php'); $router->get('/register', 'registration/create.php')->only('guest'); $router->post('/register', 'registration/store.php')->only('guest'); $router->get('/login', 'session/create.php')->only('guest'); $router->post('/session', 'session/store.php')->only('guest'); $router->delete('/session', 'session/destroy.php')->only('auth');
Um ein Formularvalidierungsobjekt zu extrahieren, müssen wir zu session/store.php gehen und den Code ausschneiden, der prüft, ob die angegebene E-Mail-Adresse und das Passwort korrekt sind. Anschließend müssen wir diesen Code in die Datei LoginForm.php verschieben, die sich im Verzeichnis Http/Forms befindet.
Die Datei LoginForm.php enthält Daten zur Benutzeranmeldung zur Validierung von Formularen und ein geschütztes Fehlerarray, das auf Fehler im Projekt hinweist
<? php namespace Http\Forms; use Core\Validator; class LoginForm { protected $errors = []; public function validate($email, $password) { if (!Validator::email($email)) { $this->errors['email'] = 'Please provide a valid email address.'; } if (!Validator::string($password)) { $this->errors['password'] = 'Please provide a valid password.'; } return empty($this->errors); } public function errors() { return $this->errors; } public function error($field, $message) { $this->errors[$field] = $message; } }
Jetzt können wir sehen, dass das Projekt gut funktioniert.
Um eine Authentifizierungsklasse zu extrahieren, müssen wir als Nächstes alle Codesegmente auswählen, die zur Authentifizierung des Benutzers verwendet werden, z. B. zur Überprüfung der E-Mail-Adresse und des Kennworts des Benutzers. Anschließend müssen wir eine neue Datei „authenticator.php“ hinzufügen, die eine Authentifizierungsklasse enthält, die für die Benutzerauthentifizierung verwendet wird. Anschließend wurden Anmelde- und Abmeldefunktionen importiert.
<?ph namespace Core; class Authenticator { public function attempt($email, $password) { $user = App::resolve(Database::class) ->query('select * from users where email = :email', [ 'email' => $email ]) ->find(); if ($user) { if (password_verify($password, $user['password'])) { $this->login([ 'email' => $email ]); return true; } } return false; } public function login($user) { $_SESSION['user'] = [ 'email' => $user['email'] ]; session_regenerate_id(true); } public function logout() { $_SESSION = []; session_destroy(); $params = session_get_cookie_params(); setcookie('PHPSESSID', '', time() - 3600, $params['path'], $params['domain'], $params['secure'], $params['httponly']); } }
Im weiteren Verlauf müssen wir zu session/store.php zurückkehren und das $form initialisieren und für die neue Benutzeranmeldung eintreten. Anschließend müssen wir eine if-Bedingung implementieren, um zu prüfen, ob das Formular gültig ist oder nicht. Wenn das Formular nicht gültig ist, müssen wir den Benutzer auf den gewünschten Pfad umleiten.
<?php use Core\Authenticator; use Http\Forms\LoginForm; $email = $_POST['email']; $password = $_POST['password']; $form = new LoginForm(); if ($form->validate($email, $password)) { if ((new Authenticator)->attempt($email, $password)) { redirect('/'); } $form->error('email', 'No matching account found for that email address and password.'); } return view('session/create.view.php', [ 'errors' => $form
Durch diese Änderungen können wir eine Authentifizierungsklasse extrahieren, um das Aussehen unseres Codes zu ändern, sodass er einfacher zu verstehen und zu ändern ist.
Ich hoffe, dass Sie es klar verstanden haben
Das obige ist der detaillierte Inhalt vonExtraktion des Formularvalidierungsobjekts und der Authentifizierungsklasse. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!