App\Application\Command\CreateUserCommand::__construct():参数 #1 ($id) 的类型必须为 Ramsey\Uuid\Uuid、Ramsey\Uuid\Lazy\LazyUuidFromString

问题描述 投票:0回答:1

我有这个控制器

<?php

namespace App\Infrastructure\Controller;

use App\Application\Command\CreateUserCommand;
use Ramsey\Uuid\Uuid;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\JsonResponse;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\Messenger\MessageBusInterface;

class UserController extends AbstractController
{

    public function __construct(private MessageBusInterface $bus){}

    public function createUser(Request $request):JsonResponse
    {

        $data = json_decode($request->getContent(),true);

    
        $userCommand = new CreateUserCommand(
            $id = Uuid::uuid4(),
            $data['email'],
            $data['name'],
            $data['surname'],
            $data['password']
        );
        
        $this->bus->dispatch($userCommand);
        
        return new JsonResponse($data);
    }
}

但是我收到这个错误

App\Application\Command\CreateUserCommand::__construct(): Argument #1 ($id) must be of type Ramsey\Uuid\Uuid, Ramsey\Uuid\Lazy\LazyUuidFromString given, called in /var/www/html/src/User/Infrastructure/Controller/UserController.php on line 28

假设

Uuid::uuid4()
生成
Ramsey\Uuid\Uuid
但它生成
Ramsey\Uuid\Lazy\LazyUuidFromString
我没有更改配置上的任何内容。

不确定此代码或配置有什么问题

php symfony uuid
1个回答
0
投票

与文档相比,出于性能原因,他们使用 LazyUuidFromString:

UUID 的惰性版本:其格式尚未确定,因此它大多仅可用于字符串/字节转换。该对象优化了实例化、序列化和字符串转换时间,但代价是增加了更高级 UUID 操作的开销。 内部:出于性能原因,此类型在内部使用,并且不应在消费者库中直接引用。

Uuid::uuid4()
返回
UuidInterface
如果您在
Ramsey\Uuid\UuidInterface
中需要
CreateUserCommand
而不是
Ramsey\Uuid\Uuid

,那将是最好的选择
© www.soinside.com 2019 - 2024. All rights reserved.