2016-03-29 4 views
3

Ich habe eine Dns Einheit, die ein content Feld mit einer NotBlank Einschränkung hatFosRestBundle PATCH Aktion + Einheit Feld mit NotBlank Einschränkung

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

ich eine Arbeits PATCH Aktion mit FosRestBundle

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

Wenn Ich versuche, einen Eintrag zu aktualisieren, ohne das content Feld zu ändern, ich bekomme den folgenden Fehler wegen meiner NotBlank Einschränkung.

{ "Fehler": "validation_failed", "ERROR_DESCRIPTION": "Validierungsdaten fehlgeschlagen Bitte unten angegebenen Fehler überprüfen.", "validation_errors": { "content": [ „kann dieser Wert nicht sei null. " ] } }

Dies ist das gleiche mit NotNull Zwang zu tun.

Ich versuche PATCH ein Eintrag ohne Änderung der content Feld.

Ist es möglich, meine Einschränkung in der Entity zu halten oder muss ich einen anderen Weg verwenden?

Antwort

1

Sie können mit validation groups umgehen, um Ihre Beschränkung auf INSERT zu halten und überspringen Sie es auf UPDATE.

Beispiel:

/** 
* @var string 
* 
* @ORM\Column(name="content", type="string", length=64000, nullable=true) 
* @Assert\NotBlank(groups={"new"}) 
* @Assert\Length(max="64000") 
*/ 
private $content; 

Wenn dann Ihre Methode einen neuen Eintrag erstellen, stellen Sie die new Gruppenvalidierung in der @ParamConverter Anmerkung:

/** 
* @ParamConverter("updatedRecord", converter="fos_rest.request_body", options={"validator"={"groups"={"new"}}}) 
*/ 

Siehe Request body listener für mehr.