什么是 Respect\\Validation?
Respect\\Validation 是一个功能强大且表达力丰富的 PHP 数据验证库。它允许通过方法链构建复杂的验证规则,使代码保持简洁和可读。该库支持超过 60 个内置规则(从 email 验证到 CPF/CNPJ 验证),并且可以通过自定义规则轻松扩展。
为什么需要验证?
数据验证是处理用户输入、API 请求或外部数据源的关键步骤。没有验证,应用程序容易受到以下威胁:
- SQL 注入和 XSS 攻击
- 导致错误的无效数据
- 业务逻辑被破坏
Respect\\Validation 通过提供统一的过滤和检查接口来解决这些问题。
安装
通过 Composer 安装该库:
composer require respect/validation安装后,引入自动加载器并使用命名空间:
require 'vendor/autoload.php';use Respect\\Validation\\Validator as v;主要功能
该库提供:
- 规则链:
v::alnum()->noWhitespace()->length(5, 20)->validate($input) - 自定义错误消息:
v::email()->setName('Email')->assert($input) - 分组验证:
v::attribute('name', v::stringType())->attribute('age', v::intVal()) - 可选字段和条件规则(例如,仅当字段存在时才进行验证)。
PHP 代码示例
简单的注册表单验证:
<?phprequire 'vendor/autoload.php';use Respect\\Validation\\Validator as v;
$data = [ 'username' => 'john_doe', 'email' => 'john@example.com', 'password' => 'secret123', 'age' => 25];
$usernameValidator = v::alnum()->noWhitespace()->length(4, 20);$emailValidator = v::email();$passwordValidator = v::length(8, 64);$ageValidator = v::intVal()->between(18, 120);
try { $usernameValidator->setName('Username')->assert($data['username']); $emailValidator->setName('Email')->assert($data['email']); $passwordValidator->setName('Password')->assert($data['password']); $ageValidator->setName('Age')->assert($data['age']); echo '所有数据有效!';} catch (\\Respect\\Validation\\Exceptions\\NestedValidationException $e) { echo implode('<br>', $e->getMessages());}错误时的结果:"Username must contain only letters and digits" 等。
何时使用
- 网站表单 — 注册、反馈、订单
- REST API — 在处理前验证 JSON 请求
- 数据导入 — 在写入数据库前验证 CSV/Excel
- 命令行脚本 — 验证 CLI 参数
Respect\\Validation 适用于任何规模的项目——从简单网站到框架(Laravel, Symfony)。它替代了冗长的 if-else 结构,并简化了测试。