FosRestBundle PATCH 操作 + 具有 NotBlank 约束的实体字段
FosRestBundle PATCH action + entity field with NotBlank constraint
我有一个 Dns
实体,它的 content
字段带有 NotBlank
约束
/**
* @var int
*
* @ORM\Column(name="id", type="integer", nullable=false)
* @ORM\Id
* @ORM\GeneratedValue(strategy="IDENTITY")
*/
private $id;
/**
* @var string
*
* @ORM\Column(name="name", type="string", length=255, nullable=true)
* @Assert\Regex("/^(([[:alnum:]-_]+(\.[[:alnum:]-_]+)*)|(\*))$/u")
*/
private $name;
/**
* @var string
*
* @ORM\Column(name="content", type="string", length=64000, nullable=true)
* @Assert\NotBlank
* @Assert\Length(max="64000")
*/
private $content;
进行了有效的 PATCH
操作
/**
* @ParamConverter("updatedRecord", converter="fos_rest.request_body")
*/
public function patchAction(PowerDNSDomain $domain, PowerDNSRecord $record, PowerDNSRecord $updatedRecord, ConstraintViolationListInterface $validationErrors)
{
if ($validationErrors->count() > 0) {
return $this->handleBodyValidationErrorsView($validationErrors);
}
$record->setName($updatedRecord->getName())
->setContent($updatedRecord->getContent())
->setTtl($updatedRecord->getTtl())
->setPrio($updatedRecord->getPrio());
$this->get('manager.dns')->saveRecord($record);
return $this->view($record);
}
当我试图在不更改 content
字段的情况下更新 Dns
条目时,由于我的 NotBlank
约束,我收到以下错误。
{
"error": "validation_failed",
"error_description": "Data validation failed. Please check errors below.",
"validation_errors": {
"content": [
"This value cannot be null."
]
}
}
这与 NotNull
约束条件相同。
我试图在不更改 content
字段的情况下修补 Dns
条目。
是否可以将我的约束保留在实体内,或者我必须使用其他方式?
您可以处理 validation groups 以保持对 INSERT
的约束并在 UPDATE
上跳过它。
示例:
/**
* @var string
*
* @ORM\Column(name="content", type="string", length=64000, nullable=true)
* @Assert\NotBlank(groups={"new"})
* @Assert\Length(max="64000")
*/
private $content;
然后,如果您的方法正在创建一个新条目,请在 @ParamConverter
注释中设置 new
验证组:
/**
* @ParamConverter("updatedRecord", converter="fos_rest.request_body", options={"validator"={"groups"={"new"}}})
*/
有关更多信息,请参阅 Request body listener。
我有一个 Dns
实体,它的 content
字段带有 NotBlank
约束
/**
* @var int
*
* @ORM\Column(name="id", type="integer", nullable=false)
* @ORM\Id
* @ORM\GeneratedValue(strategy="IDENTITY")
*/
private $id;
/**
* @var string
*
* @ORM\Column(name="name", type="string", length=255, nullable=true)
* @Assert\Regex("/^(([[:alnum:]-_]+(\.[[:alnum:]-_]+)*)|(\*))$/u")
*/
private $name;
/**
* @var string
*
* @ORM\Column(name="content", type="string", length=64000, nullable=true)
* @Assert\NotBlank
* @Assert\Length(max="64000")
*/
private $content;
进行了有效的 PATCH
操作
/**
* @ParamConverter("updatedRecord", converter="fos_rest.request_body")
*/
public function patchAction(PowerDNSDomain $domain, PowerDNSRecord $record, PowerDNSRecord $updatedRecord, ConstraintViolationListInterface $validationErrors)
{
if ($validationErrors->count() > 0) {
return $this->handleBodyValidationErrorsView($validationErrors);
}
$record->setName($updatedRecord->getName())
->setContent($updatedRecord->getContent())
->setTtl($updatedRecord->getTtl())
->setPrio($updatedRecord->getPrio());
$this->get('manager.dns')->saveRecord($record);
return $this->view($record);
}
当我试图在不更改 content
字段的情况下更新 Dns
条目时,由于我的 NotBlank
约束,我收到以下错误。
{ "error": "validation_failed", "error_description": "Data validation failed. Please check errors below.", "validation_errors": { "content": [ "This value cannot be null." ] } }
这与 NotNull
约束条件相同。
我试图在不更改 content
字段的情况下修补 Dns
条目。
是否可以将我的约束保留在实体内,或者我必须使用其他方式?
您可以处理 validation groups 以保持对 INSERT
的约束并在 UPDATE
上跳过它。
示例:
/**
* @var string
*
* @ORM\Column(name="content", type="string", length=64000, nullable=true)
* @Assert\NotBlank(groups={"new"})
* @Assert\Length(max="64000")
*/
private $content;
然后,如果您的方法正在创建一个新条目,请在 @ParamConverter
注释中设置 new
验证组:
/**
* @ParamConverter("updatedRecord", converter="fos_rest.request_body", options={"validator"={"groups"={"new"}}})
*/
有关更多信息,请参阅 Request body listener。