webman 默认无 validator 类,需手动引入 symfony/validator 或 respect/validation;推荐后者,通过链式构建规则校验字段,注意处理字段缺失、空值及自定义错误提示。

Webman 的 Validator 不是 Laravel 那套,它默认没内置验证器类,直接调用会报 Class "support\Validator" not found —— 你得自己装、自己配、自己写规则逻辑。
Webman 中 Validator 类不存在,必须手动引入或替换
Webman 默认不带 Validator 类,官方推荐用 symfony/validator 或轻量方案如 respect/validation。强行 require support\Validator 会失败,因为 webman/support 包里压根没这个类。
- 别在
app/Controller里写new \support\Validator(...),会 fatal error - 如果项目已用
symfony/validator,优先走它的ValidatorInterface+ 约束注解 / 约束对象方式 - 若图快,可用
respect/validation:它无依赖、链式写法直观,适合表单级校验 - 注意 autoload:用
respect/validation时需确保 composer 自动加载生效(运行composer dump-autoload)
用 respect/validation 做表单字段校验的典型写法
它不靠注解,靠构建验证器对象链,对每个字段单独断言,适合 Webman 这种轻量路由场景。
use Respect\Validation\Validator;
$data = $request->all();
$rules = [
'username' => Validator::stringType()->length(3, 20)->alnum('_'),
'email' => Validator::email(),
'age' => Validator::intVal()->between(1, 150),
];
foreach ($rules as $field => $rule) {
if (!$rule->validate($data[$field] ?? null)) {
return json(['code' => 400, 'msg' => "$field 格式不合法"]);
}
}
-
Validator::stringType()比is_string()更严格,会过滤 null/empty -
alnum('_')允许下划线,但默认不允许多字节字符(中文需显式加regex('/^[\x{4e00}-\x{9fa5}a-zA-Z0-9_]+$/u')) - 别漏掉
$data[$field] ?? null,否则字段缺失时validate(null)可能通过(比如email()对 null 返回 true)
自定义错误消息和批量校验的取舍
respect/validation 默认只告诉你“不通过”,不告诉你“为什么”。要精确提示,得用 assert() + try/catch,或提前用 getMessages()。
- 用
assert()会抛异常,适合统一异常处理器;用validate()+ 手动拼错提示更可控 - 批量校验建议用
Validator::keySet()构建整体规则,但它对嵌套数组支持弱,复杂结构不如分字段校验清晰 - 性能上无明显差异,但
keySet一次解析全部规则,foreach分字段是惰性执行——字段多且前几个就错时,后者更快中断 - Webman 是常驻内存模型,别在每次请求里重复 new Validator 实例(虽然开销小),可考虑封装成服务或静态方法复用
真正容易被忽略的是字段缺失处理和空字符串语义:Webman 的 $request->all() 不自动过滤空值,''、null、0、'0' 在不同规则下表现不一致,校验前最好先做 array_filter($data, function($v) { return $v !== '' && $v !== null; }) 或按业务约定明确空值含义。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











