2016-03-29 7 views
3

私はFosRestBundleFosRestBundle PATCHアクション+実体フィールドがでNotBlank制約

/** 
* @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); 
} 

と作業PATCHアクションを行った

/** 
* @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; 

NotBlank制約とcontentフィールドを持つDnsエンティティを持っていますフィールドを変更せずにDnsエントリを更新しようとしています。のために次のエラーが表示されます。制約。

{ "エラー": "validation_failed"、 "しましたerror_description":{ "内容":[ 「この値はできません、 "validation_errorsを" "。データの検証は、以下のエラーを確認してください失敗しました"ヌルになる。 ] }}

これは、NotNull制約と同様に行っています。

フィールドを変更せずにDnsのエントリにパッチを適用しようとしています。

私の制約をエンティティ内に保持することは可能ですか、別の方法を使用する必要がありますか?

答えて

1

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を参照してください。

関連する問題