PHP класс-валидатор формы
В данной статье я покажу Вам как можно создать класс-валидатор формы на PHP. Преимущество данного класса состоит в том, что вся логика валидации находится в одном месте, а не размазана по кодe, что соответствует парадигме MVC.
Абстрактный класс, от которого должны наследоваться все классы-валидаторы:
<?php
abstract class Validator
{
private $errors = [];
/**
*
* Проверяет значения на соответствие условию,
* если условия нарушаются, помещает в массив $errors
* сообщение об ошибке
*/
abstract function validate() : array;
// добавляет сообщение об ошибке в массив
public function addError($message) {
$this -> errors[] = $message;
}
// влзвращает список всех найденных ошибок
public function getErrors() {
return $this -> errors;
}
}
Класс валидатор-формы:
<?php
class FormValidator extends Validator
{
// массив значений формы
private $request = [];
public function __construct(array $request) {
$this -> request = $request;
}
public function validate() : array {
$req = $this -> request;
if( !$req["login"] )
$this -> addError('Имя не может быть пустым');
$nameLen = mb_strlen( $req["login"] );
if( $nameLen < 5 or $nameLen > 60 ) {
$this -> addError('Длина имени не может превышать 60 или быть менне 5 символов');
}
// ... еще много разных проверок
return $this->getErrors();
}
}
Страница входа на сайт:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>Вход на сайт</title>
<style>
body {
background: #f0f0f0;
}
form {
margin: 100px auto;
text-align: center;
border:1px solid #dee;
padding: 10px;
width: 300px;
background: #fff;
}
label, input[type="submit"] {
display: block;
margin: 5px;
}
input[type="submit"] {
margin: 10px auto;
}
.form-error {
padding: 5px;
color: red;
}
</style>
</head>
<body>
<form action="login.php" method="get">
<h3>Вход на сайт</h3>
<?php $errors = explode(',',$_GET["errors"]) ?? []; ?>
<?php if( $errors ): ?>
<?php foreach($errors as $error): ?>
<p class="form-error"><?=$error ?></p>
<?php endforeach ?>
<?php endif ?>
<label for="login">Логин</label>
<input type="text" name="login" id="login">
<label for="password">Пароль</label>
<input type="text" name="password" id="password">
<input type="submit" value="Вход" name="enter">
</form>
</body>
</html>
Контроллер, обрабатывающий форму:
<?php
spl_autoload_register();
// если форма заполнена
if( $_REQUEST['enter'] ) {
// создаем класс-валидатор формы
$validator = new FormValidator($_REQUEST);
// проверяем на ошибки
$errors = $validator->validate();
// объединяем массив в строку для передачи обратно на форму логина
$errors = join(',',$errors);
if( $errors )
// передаем ошибки на форму
header("Location: login.form.php?errors=$errors");
print_r($_REQUEST);
}
Вот такой класс-валидатора формы на PHP можно использовать при создании сайта.
-
- Михаил Русаков
Комментарии (0):
Для добавления комментариев надо войти в систему.
Если Вы ещё не зарегистрированы на сайте, то сначала зарегистрируйтесь.