php - 自定义控制器验证不起作用 Api 平台
问题描述
您好,我正在尝试验证用户实体验证,但只有一个带有 PATCH 请求的属性,但我得到了Cannot validate values of type \"NULL\" automatically. Please provide a constraint.
即使我从 validation_groups 中删除 Default,我也会得到相同的结果
非常感谢您的帮助。
应用\实体\用户
/**
* @ORM\Entity(repositoryClass="App\Repository\UserRepository")
* @ApiResource(
* itemOperations={
* "get",
* "put" = {
* "method" = "PUT",
* "security"="(is_granted('ROLE_ADMIN') and object.getAssociation() == user.getAssociation())",
* "security_message"="Only Admin or the owner can edit this field",
* "denormalization_context"={"groups"={"user:update"}, "disable_type_enforcement"=true},
* "validation_groups"={"Default", "user_update"}
* },
* "patch_add_new_member_to_pay" = {
* "method" = "PATCH",
* "path" = "/users/{id}/addNewMemberToPay",
* "controller" = PayingMembershipForOthersController::class,
* "denormalization_context" = {"groups" = {"add_new_member_to_pay"}},
* "validation_groups" = {"Default", "add_new_member_to_pay"}
* }
* },
* collectionOperations={
* "get",
* "post" = {
* "method" = "POST",
* "security"="is_granted('ROLE_ADMIN')",
* "denormalization_context"={"groups"={"user:create"}, "disable_type_enforcement"=true},
* "validation_groups"={"Default", "user_create"}
* },
* },
* normalizationContext={"groups"={"user:read"}}
* )
*/
class User {
/**
* @ORM\Id()
* @ORM\GeneratedValue()
* @ORM\Column(type="integer")
*
* @Groups({"user:read"})
*/
private ?int $id = null;
/**
* @ORM\Column(type="string", length=100)
* @Assert\NotBlank(groups={"user_create", "user_update"})
* @Assert\Regex(pattern="/\d/", match=false, message="Your name should not contain numbers")
* @Groups({"user:read", "user:create", "user:update"})
*/
private ?string $fullname;
/**
* @Groups({"add_new_member_to_pay"})
* @Assert\NotNull(groups={"add_new_member_to_pay"})
*/
private ?string $payForNewMember = null;
...getters and setters
}
App\Controller\PayingMembershipForOthersController
namespace App\Controller;
use ApiPlatform\Core\Validator\ValidatorInterface;
use App\Entity\User;
use Symfony\Component\HttpFoundation\Request;
class PayingMembershipForOthersController
{
private ValidatorInterface $validator;
public function __construct(ValidatorInterface $validator)
{
$this->validator = $validator;
}
public function __invoke(User $data, Request $request)
{
$this->validator->validate($data);
}
}
所以我故意设置空值{"payForNewMember": ""}
验证不显示违规列表
解决方案
您的自定义控制器必须返回用户或响应。
class PayingMembershipForOthersController
{
private ValidatorInterface $validator;
public function __construct(ValidatorInterface $validator)
{
$this->validator = $validator;
}
public function __invoke(User $data)
{
$this->validator->validate($data);
return $data;
}
}
推荐阅读
- java - 如何添加它首先删除节点并删除节点最后
- flutter - 使用 Bloc 刷新 Flutter 中的对话框
- r - 如何为所有列添加引号?
- pandas - 对熊猫中每个组内的数据进行重新采样
- html - HTML 中的多个参考书目,使用关键字 - 可能吗?
- date - Stata,字符串变量到季度时间序列
- javascript - 设置超时功能奇怪地与包含清理的 useEffect 挂钩重叠?图像轮播
- javascript - 在 React 文档时钟示例中添加一个按钮来停止计时器
- python - Pandas 合并 2 个键,第二个键返回第一个原始正确的第二个 Nan
- c++ - 有什么方法可以让 split_regex 接受 const 字符串作为输入?