Composer安装需按PHP版本选版:8.1+用composer require respect/validation(v3),7.4–8.0须指定^2.2;v3弃用静态调用,须Validator::create()后链式调用;中文提示需在assert前Language::load('zh_CN');v3异常无字段名,需自行封装。

直接运行 composer require respect/validation 就能装上最新版(v3.x),但前提是 PHP ≥ 8.1;PHP 7.4–8.0 必须显式指定 ^2.2,否则会安装失败或运行报错。
PHP 版本不匹配导致安装失败或运行时 Class not found
常见现象是执行 composer require respect/validation 后,new Validator() 报 Fatal error: Class 'Respect\Validation\Validator' not found,或者 Composer 直接提示版本冲突。
- PHP 8.1+:默认走 v3.x,命令就是
composer require respect/validation - PHP 7.4–8.0:必须加版本约束,运行
composer require respect/validation:^2.2 - PHP
- 装完后务必确认
vendor/autoload.php已被require,仅写use不行
require 'vendor/autoload.php' 被漏掉或路径写错
这是最常踩的坑——类名、命名空间都对,但一 new 就报错。根本原因不是库没装好,而是自动加载器根本没加载。
- 必须在使用任何
Respect\Validation类之前执行require 'vendor/autoload.php' - 路径要写对:
__DIR__ . '/vendor/autoload.php'比硬写相对路径更安全 - 如果项目用了框架(如 Laravel、Symfony),通常已自动加载,但 CLI 脚本或简单 PHP 文件里仍需手动加
- 错误示范:
use Respect\Validation\Validator;单独存在,没有require—— 这一定失败
v2 和 v3 的实例化方式差异直接影响代码能否跑通
v2 支持静态链式调用(Validator::string()->length(3, 10)),v3 已弃用该写法,强制推荐 Validator::create() 实例化。
- v2 可用:
Validator::email()->isValid($email) - v3 推荐且稳定:
$v = Validator::create(); $v->email()->assert($email) - v3 下继续用静态调用会触发
Deprecated: Calling static method ... is deprecated警告,未来版本将移除 - 如果你从 v2 升级,所有
Validator::xxx()都得改成先create()再链式调用
中文错误提示不生效,其实是 Language::load() 执行时机错了
即使装了 respect/language(v3 自带),Language::load('zh_CN') 放错位置,错误消息照样是英文。
- 必须在创建验证器或调用
assert()之前执行,例如:Respect\Language\Language::load('zh_CN'); - 不能放在
try/catch块里、不能放在条件分支中(比如只在 debug 模式下加载) - 不能晚于
$v->email()->assert($email),否则无效 - v2 用户注意:需单独
composer require respect/language,v3 已包含
真正容易被忽略的是:v3 默认不带字段名上下文,assert() 抛出的异常里不含字段标识,业务中几乎都要自己封装一层验证器类来补全字段映射和错误包装——这点官方文档轻描淡写,但上线后第一轮表单验证就会暴露出来。











