Skip to content

#[Validate]注解模式报错 #1

@mengdodo

Description

@mengdodo

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

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions