priteshyadav444 / validation
该库受Laravel验证的启发,为Core PHP表单验证提供了有限的但类似的功能。
Requires
- php: >=8.0
Requires (Dev)
- phpunit/phpunit: ^10.0
- squizlabs/php_codesniffer: *
README
该库受Laravel验证的启发,为表单验证提供了有限的但类似的功能。它允许开发者以简单、易读的格式(例如“required|numeric”)定义验证规则,并快速验证用户输入。这有助于确保表单中输入的数据是准确、一致并符合某些标准的,从而提高整体用户体验并降低应用中错误的风险。
该库为PHP中不同类型的数据输入提供了验证类。它包括以下类
Validate
:包含用于验证单个输入(如字符串、数字和密码)的函数。FormValidator
:使用Validate类验证表单输入并返回错误。FileValidator
:验证和上传文件。它接收一个$_FILES对象和一个用于标识文件的键,以及用于上传文件的目标目录。ErrorHandler
:返回错误消息,并提供用于处理特定表单输入的错误的方法。
特性
- 易于使用
- 类似Laravel的API
- 文件处理
- 验证
- 错误处理
需求
- PHP 7.0或更高版本。
使用 - 如何在Core PHP中用于表单验证
FormValidator类
FormValidator类使用Validate类通过Error类验证表单输入并返回错误。如何使用
-
通过使用require或include语句将FormValidator类包含到您的代码中。
-
创建FormValidator类的一个实例并将其存储在一个变量中。
-
在FormValidator类的实例上调用validate方法,并将表单数据和验证规则作为参数传递给它。
-
validate方法将根据规则验证表单数据,如果数据有效则返回true,否则返回false。
-
如果validate方法返回false,您可以通过FormValidator类的实例上的errors方法访问错误消息。
$path = "../../validation/validators/FormValidator.php"; indlude "$path"; use Validators\{FormValidator, FileValidator}; $obj = new FormValidator(); if (isset($_POST['submit'])) { $validations = [ 'name' => 'string', 'email' => 'email', 'phone' => 'numeric|min:10|max:10', 'docs' => 'required|filetype:txt' ]; if (!$obj->validate($_POST, $validations)->isError()) { $file = new FileValidator($_FILES, "docs", "files"); $file->upload(); } }
FormValidator类使用ErrorHandler
类来处理错误:使用isError()方法和all()方法可以列出错误。
if ($obj->isError() != false) {
echo '<div class="alert alert-danger" role="alert">';
foreach ($obj->all() as $error)
echo "<li>$error</li>";
echo '</div>';
}
要填充有效的旧值,我们可以使用old()方法。
<div class="mb-3">
<label for="name" class="form-label">Name</label>
<input type="text" name="name" value='<?php echo "{$obj->old('name')}"; ?>' class="form-control" id="name" >
</div>
<div class="mb-3">
<label for="email" class="form-label">Email</label>
<input type="email" oninvalid="InvalidMsg(this);" oninput="InvalidMsg(this);" name="email" value='<?php echo "{$obj->old('email')}"; ?>' class="form-control" id="email" aria-describedby="emailHelp">
</div>
<div class="mb-3">
<label for="phone" class="form-label">Phone</label>
<input type="text" name="phone" value='<?php echo "{$obj->old('phone')}"; ?>' class="form-control" id="phone">
</div>
ErrorHandler
类
ErrorHandle类提供处理和存储错误消息的函数。该类有设置错误消息、返回所有错误消息、检查是否存在错误和处理错误消息的函数。
isError()
:方法检查对象中的$errors
数组是否存储了任何错误,并返回一个表示错误存在的布尔值。如果传递了$key
参数,它将检查在$errors
数组中是否为该特定键存储了任何错误,并相应地返回一个布尔值。all()
:方法返回对象中$errors
数组中存储的所有错误消息的数组。old($key)
:该old
方法是PHP类中的一个函数,用于返回数据有效时的旧值。它接受一个参数$key
,用于从名为oldValues
的数组中检索值。
Validate
类
这是一个名为"Validate"的PHP类,它提供了验证不同数据类型(整数、浮点数、字符串、电子邮件、密码)的函数,以及获取不同数据类型(整数、字符串、长度)的函数。该类还包括通过继承"ErrorHandler"类实现的错误处理功能。以下方法
-
isInt
:验证输入是否为整数。 -
isfloat
:验证输入是否为浮点数。 -
isString
:验证输入是否为字符串。 -
isEmail
:验证输入是否为有效的电子邮件地址。 -
getInt
:将输入返回为整数、浮点数或布尔值(false),如果它无效。 -
getString
:将输入返回为字符串或布尔值(false),如果它不是有效的字符串。 -
getLength
:返回输入的长度。 -
checkMinimum
:检查输入的长度是否大于或等于指定的长度。 -
checkMaximum
:检查输入的长度是否小于或等于指定的长度。 -
checkPassword
:根据指定的正则表达式验证输入是否为密码。 -
extractInteger
:从输入中提取仅整数部分。 -
extractFloat
:从输入中提取仅浮点数部分。 -
senitizeInput
:这是一个安全措施,用于清理用户输入。它按以下顺序执行以下操作-
使用
trim()
删除输入字符串开头和结尾的任何空白。 -
使用
stripslashes()
从输入字符串中删除反斜杠(\
)。 -
使用
htmlspecialchars()
将输入字符串中的任何特殊HTML字符转换为相应的HTML实体。
-
这些操作的目的确保输入数据没有恶意内容,例如脚本,可能会损害应用程序。该方法将清理后的输入作为结果返回。
在此库中添加自定义验证的步骤
-
在Validate类中创建一个返回布尔值的验证方法。例如:在Validate类中public function checkEmail():bool。
-
在FormValidation类的getValidationType()方法内的match函数中将验证键映射到验证类型。例如,'email' => CHECK_EMAIL。
-
在errorHandler类的getErrorMessage()方法中将$validationType映射到错误代码。例如,'CHECK_EMAIL' => 'INVALID_DATATYPE_KEY'。
-
在errorHandler类的$errorHandler属性中将$errorCode映射到错误消息。例如,'INVALID_DATATYPE_KEY' => 'Invalid Data types'。
-
在FormValidator的performValidation()方法中添加对$validationType(CHECK_EMAIL)的条件语句。
- 使用Validate类方法执行验证,如果验证失败则调用setError()方法,并
- 通过getErrorMessage()方法传递错误消息,通过传递$validationType(如果验证失败)和其他必要参数。
对库用户的 重要通知
请注意,此库尚未完全测试,可能存在错误。如果在使用此库时遇到任何问题,我们恳请您在此存储库的问题部分中报告它们。这将使我们能够尽快识别和解决任何问题。
感谢您的理解与合作。