Composer 安装 respect/validation 失败主因是 PHP 版本不匹配(v3+ 需 PHP ≥ 8.0,PHP 7.4 应用 v2.2)、镜像源未同步或 minimum-stability 限制;类找不到需检查 autoload 加载与命名空间大小写;key() 仅校验键存在,attribute() 校验键存在且值合规;validate() 返回布尔值,错误信息需 getMessages() 或改用 assert() 获取。

Composer 安装 respect/validation 失败的常见原因
直接运行 composer require respect/validation 报错,大概率不是库本身问题,而是 PHP 版本或 Composer 配置卡住了。
- respect/validation v3+ 要求 PHP ≥ 8.0;v2 支持 PHP 7.2+,但已停止维护——如果你用的是 PHP 7.4,得显式指定版本:
composer require respect/validation:^2.2 - 某些公司内网镜像源没同步新版包,临时切回官方源试试:
composer config -g repo.packagist composer https://packagist.org - 如果项目启用了
minimum-stability: stable,而你又想装带 alpha/beta 标签的预发布版(比如v3.0.0-alpha),会拒绝安装——这时要么改配置,要么别碰 alpha 版
require 后为什么 new Validator() 找不到类
自动加载没生效,99% 是没跑 composer dump-autoload 或没引入 autoload.php。
- 确认
vendor/autoload.php已在入口文件中require(Laravel、Symfony 等框架通常已处理,纯脚本必须手动加) - 类名大小写敏感:
RespectValidationValidator不是respectvalidationvalidator,首字母大写不能错 - 命名空间漏了:必须
use RespectValidationValidator;,否则得写全限定名RespectValidationValidator::int()
Validator::key() 和 Validator::attribute() 的区别在哪
都用于校验数组字段,但语义和行为完全不同,混用会导致校验逻辑失效。
-
Validator::key('name'):只检查数组是否含有'name'这个键(存在性),不关心值类型 -
Validator::attribute('name', Validator::string()->length(1, 50)):先确保有'name'键,再对它的值做字符串长度校验 - 如果传入的是对象(非数组),
key()会直接抛出UnexpectedValueException;attribute()同样失败,但错误信息更明确指向“无法访问属性”
自定义规则时 validate() 返回 false 却没报错信息
Respect Validation 默认只返回布尔值,错误详情得主动调用 getMessages() 或用 assert() 触发异常。
- 用
validate():返回true/false,需自己组合提示:$v->validate($data) ?: $v->getMessages() - 用
assert():校验失败直接抛NestedValidationException,包含完整路径和原因,适合 API 响应层统一捕获 - 注意
getMessages()返回的是扁平数组,中文提示需提前设置语言:Validator::with('zh-CN'),否则默认英文
Respect Validation 的链式规则看着灵活,但嵌套深了(比如 key('user')->attribute('profile', ……)->attribute('avatar', ……))会让错误定位变模糊——这时候不如拆成多个独立验证器,各自负责一层结构。