Rest 自定义操作控制器中的验证
我试图只在api平台上的自定义操作上进行验证,但它不起作用 我只想在验证没有错误的情况下更改密码,但在任何情况下都会更改密码 如果我从验证注释中删除了验证组,它就会工作 例如,如果我将@Assert\NotBlank(groups={“put reset password”})替换为@Assert\NotBlank验证过程 这是实体的代码:Rest 自定义操作控制器中的验证,rest,symfony,api-platform.com,Rest,Symfony,Api Platform.com,我试图只在api平台上的自定义操作上进行验证,但它不起作用 我只想在验证没有错误的情况下更改密码,但在任何情况下都会更改密码 如果我从验证注释中删除了验证组,它就会工作 例如,如果我将@Assert\NotBlank(groups={“put reset password”})替换为@Assert\NotBlank验证过程 这是实体的代码: "CHANGE-PASSWORD"={ "method"="PUT", "path"="/users/change-password/
"CHANGE-PASSWORD"={
"method"="PUT",
"path"="/users/change-password/{id}",
controller"="App\Controller\ChangePasswordController",
"access_control"="is_granted('EDIT-PASSWORD', previous_object) and object == user",
"openapi_context"={
"summary"="Change Password"
},
"denormalization_context"={
"groups"={"put-reset-password"}
},
"validation_groups"={"put-reset-password"},
},
这是我的控制器
public function __invoke(User $data)
{
// Validate data and handle validation errors
$this->validator->validate($data);
$data->setPassword($this->userPasswordEncoder->encodePassword($data, $data->getNewPassword()));
$this->entityManager->flush();
$token = $this->tokenManager->create($data);
return $data;
}
这里是我使用验证组的一个属性
/**
* @Groups({"put-reset-password"})
* @Assert\NotBlank(groups={"put-reset-password"})
* @UserPassword(groups={"put-reset-password"})
*/
private $oldPassword;
有什么问题吗 这是一种奇怪的行为。
您得到null可能是因为您使用了接口
使用apipplatform\Core\Validator\Validator接口代码>
如果使用inface使用Symfony\Component\Validator\Validator\Validator接口
,则必须是get objectConstraintViolationListInterface
我也有类似的问题。以下解决方案帮助了我:
/**
* @Groups({"put-reset-password"})
* @Assert\NotBlank(groups={"Default", "put-reset-password"})
* @UserPassword(groups={"put-reset-password"})
*/
private $oldPassword;
奇怪的是,在添加了“Default”
之后,我的验证在我的自定义操作中进行
有用链接:
顺便说一句,很抱歉我的英语不好。我有完全相同的案例,我只是做了一些事情来处理默认的组,但实际的解决方案是为验证器提供您想要验证的组:
public function __invoke(User $data)
{
$this->validator->validate($data, null, 'put-reset-password');
...
}
验证器的validate方法返回约束冲突列表。您必须检查违规计数,以了解数据是否有效。@FlorianHermann在本例中,约束违规列表不返回任何内容,似乎当我将组放入属性断言时,验证失败。即使我var_dump($this->validator->validate($data)),我也有NULL。这似乎很奇怪,因为validate方法总是应该返回一个ConstraintViolationListInterface实例,即使验证没有问题。我知道,但我认为当我在断言中使用validations_组时,validator不喜欢您提到的自定义操作。您是否尝试过在自定义操作上应用验证组?谢谢你的帮助,伙计。我的案子完全一样,不起作用。