我正在尝试对请求实现symfony validation asset
。
我将form-data
从 Postman 传递到控制器中的路由。
#[Route(path: '/test', name: 'test', methods: 'GET')]
public function login(LoginRequest $loginRequest): Response
我已经创建了一个loginRequest
DTO,如下所示:
class LoginRequest
{
public function __construct(
/**
* @Assert\NotBlank
*/
public string $username,
/**
* @Assert\NotBlank
*/
public string $password
) {
}
}
但我得到以下错误。
Cannot autowire service "App\Dto\LoginRequest": argument "$username" of method "__construct()" is type-hinted "string", you should configure its value explicitly.
有人能帮助我如何使用DTO来验证参数请求吗?
3条答案
按热度按时间mpgws1up1#
您需要在方法中使用Serializer component并反序列化DTO,以便使用数据创建对象。
您的DTO应如下声明:
控制器方法:
zysjyyx42#
这是因为您的应用程序尝试使用DTO创建服务,并自动连接其构造器参数。
缺省服务容器配置如下
要从服务容器中排除DTO,可以在名为
Dto
的文件夹中创建它,然后将此文件夹添加到配置文件的exclude行,如下所示。exclude: '../src/{DependencyInjection,Entity,Tests,Dto,Kernel.php}'
6rqinv9w3#
您可以编写自己的Argument Resolver,它将在控制器操作中注入任何实现
DtoResolvedInterface
的对象声明任何空接口只是为了区分DTO类。
并在LoginRequest中实现此接口