respect validation v1.x 必须用 composer require respect/validation:^1.1 安装归档版,链式调用后需显式 validate() 或 assert(),自定义规则需提前设置 withrulepath() 且避免 psr-4 冲突,异常无字段名需手动包装。

Respect Validation 不能直接通过 composer require 安装最新版,因为 v2+ 已废弃主仓库,官方推荐迁移到 respect/validation 的替代方案(league/validator 或 symfony/validator),但若你仍需使用 v1.x 版本(如维护旧项目),必须指定旧包名和版本约束。
安装时必须用 respect/validation 还是 respect/validation-old?
v1.x 系列的最终稳定版(如 1.1.x)已从 respect/validation 拆出并归档,现在 Composer 默认安装的是空壳包或重定向包。实际可用的旧版必须显式声明:
- 若项目 PHP ≥ 7.2 且只需基础规则(如
email()、int()),用:composer require respect/validation:^1.1
—— 这会拉取 GitHub 上归档的respect/validationv1.1.37,它仍可工作但不再更新 - 若 PHP Class 'RespectValidationValidator' not found,说明自动加载失败,需确认
vendor/autoload.php已引入,且未被 PSR-4 冲突覆盖 - 不要运行
composer require respect/validation不带版本号——它可能装入 v2 的占位包,触发Call to undefined method RespectValidationValidator::string()
Validator::input() 不存在?正确入口是 Validator::create() 还是静态调用?
v1.x 中没有 input() 方法,常见错误是把文档混淆成 v2 写法。所有校验都从 Validator 类静态方法发起:
- 基本用法:
$result = Validator::string()->length(1, 255)->validate($value);
- 链式构建规则后,必须显式调用
validate()或assert(),否则只是返回 Rule 实例,不执行校验 - 若想捕获异常而非返回布尔值,用
assert();它会在失败时抛RespectValidationExceptionsValidationException,注意命名空间要正确导入 -
Validator::create()是 v2 引入的工厂方法,v1.x 中不存在——用了会报Call to undefined method
自定义规则无法加载:为什么 Validator::withRulePath() 不生效?
v1.x 支持通过 withRulePath() 注册自定义规则类,但它依赖 autoloader 的文件路径映射,容易因 PSR-4 配置冲突失效:
- 确保自定义规则类文件名与类名严格一致(如
MyCustomRule.php→class MyCustomRule),且放在指定目录下 - 调用顺序很重要:必须在首次使用
Validator前设置路径,例如在index.php开头就写:Validator::withRulePath(__DIR__ . '/rules');
- 如果用了 Composer 的 autoload 自动发现机制(如
"psr-4": {"App\Rules\": "rules/"}),就不该再手动调用withRulePath(),否则会重复注册导致Class not found - v1.x 的规则加载不支持命名空间嵌套查找,路径只认一级目录下的类文件
真正麻烦的不是怎么写规则,而是 v1.x 的异常信息默认不包含字段名——你得自己包装一层才能把 $key => $error 映射出来。另外,中文错误提示需要手动替换 message,没有内置 i18n 支持。这些细节在升级到 Symfony Validator 时反而更省事。











