env
"workerman/webman-framework": "^2.1", //2.2.0
"webman/validation": "^2.2" // v2.2.1
控制器内使用
#[Validate(validator: UserValidator::class, scene: 'create')]
public function create(Request $request): Response
{
$data = $request->post();
...
}
UserValidator 使用 php webman make:validator UserValidator -p admin创建
<?php
declare(strict_types=1);
namespace plugin\admin\app\validation;
use support\validation\Validator;
class UserValidator extends Validator
{
protected array $rules = [];
protected array $messages = [];
protected array $attributes = [];
protected array $scenes = [];
}
报错信息
{
"code": 500,
"msg": "Call to undefined method Illuminate\\Translation\\FileLoader::addPath()",
"traces": "Error: Call to undefined method Illuminate\\Translation\\FileLoader::addPath() in /Users/xxx/vendor/webman/validation/src/Factory/ValidationFactory.php:108\nStack trace:\n#0 /Users/xxx/vendor/webman/validation/src/Factory/ValidationFactory.php(36): Webman\\Validation\\Factory\\ValidationFactory::createLoader()\n#1 /Users/xxx/vendor/webman/validation/src/Factory/ValidationFactory.php(24): Webman\\Validation\\Factory\\ValidationFactory::createFactory()\n#2 /Users/xxx/vendor/webman/validation/src/Validator.php(104): Webman\\Validation\\Factory\\ValidationFactory::getFactory()\n#3 /Users/xxx/vendor/webman/validation/src/Validator.php(69): Webman\\Validation\\Validator->toIlluminate()\n#4 /Users/xxx/vendor/webman/validation/src/Middleware.php(120): Webman\\Validation\\Validator->validate()\n#5 /Users/xxx/vendor/webman/validation/src/Middleware.php(57): Webman\\Validation\\Middleware->validateMethod(Object(support\\validation\\annotation\\Validate), Array)\n#6 /Users/xxx/vendor/webman/validation/src/Middleware.php(31): Webman\\Validation\\Middleware->handleMethodValidation(Object(support\\Request), Array, Array)\n#7 /Users/xxx/vendor/workerman/webman-framework/src/App.php(468): Webman\\Validation\\Middleware->process(Object(support\\Request), Object(Closure))\n#8 /Users/xxx/vendor/workerman/webman-framework/src/App.php(198): Webman\\App::Webman\\{closure}(Object(support\\Request))\n#9 /Users/xxx/vendor/workerman/workerman/src/Connection/TcpConnection.php(792): Webman\\App->onMessage(Object(Workerman\\Connection\\TcpConnection), Object(support\\Request))\n#10 /Users/xxx/vendor/workerman/workerman/src/Events/Select.php(406): Workerman\\Connection\\TcpConnection->baseRead(Resource id #289)\n#11 /Users/xxx/vendor/workerman/workerman/src/Worker.php(1758): Workerman\\Events\\Select->run()\n#12 /Users/xxx/vendor/workerman/workerman/src/Worker.php(1554): Workerman\\Worker::forkOneWorkerForLinux(Object(Workerman\\Worker))\n#13 /Users/xxx/vendor/workerman/workerman/src/Worker.php(1534): Workerman\\Worker::forkWorkersForLinux()\n#14 /Users/xxx/vendor/workerman/workerman/src/Worker.php(603): Workerman\\Worker::forkWorkers()\n#15 /Users/xxx/vendor/workerman/webman-framework/src/support/App.php(147): Workerman\\Worker::runAll()\n#16 /Users/xxx/start.php(5): support\\App::run()\n#17 {main}"
}
codex-5.4得出结论
### 所以问题本质是
不是你注解不会用,而是:
- 你一旦用了 #[Validate(...)]
- 就会触发 webman/validation 的验证工厂
- 它内部用了一个当前 Illuminate\Translation\FileLoader 不支持的方法
- 所以直接 500
env
控制器内使用
UserValidator 使用
php webman make:validator UserValidator -p admin创建报错信息
codex-5.4得出结论