我有这个控制器
<?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
我没有更改配置上的任何内容。
不确定此代码或配置有什么问题
与文档相比,出于性能原因,他们使用 LazyUuidFromString:
UUID 的惰性版本:其格式尚未确定,因此它大多仅可用于字符串/字节转换。该对象优化了实例化、序列化和字符串转换时间,但代价是增加了更高级 UUID 操作的开销。 内部:出于性能原因,此类型在内部使用,并且不应在消费者库中直接引用。
Uuid::uuid4()
返回 UuidInterface
如果您在 Ramsey\Uuid\UuidInterface
中需要 CreateUserCommand
而不是 Ramsey\Uuid\Uuid
,那将是最好的选择