2017-08-14 1 views
1

Ich habe ein Problem mit der Plattform-API (https://api-platform.com/), wenn ich eine Entität habe, die von einer anderen Entität erbt. Beispiel: Worker-Entität, die von User-Entität erbt. Wenn ich auf die Platform-API-Dokumentation gehe, erscheinen alle Worker-Eigenschaften in der Benutzerklasse.Vererbungsentität mit API-Plattform Symfony


Es ist besser ein Schema als eine Erklärung. Hier sind meine zwei Entitäten und das Ergebnis der Dokumentation mit dem Problem

/** 
* User 
* 
* @ORM\Table(name="user") 
* @ORM\InheritanceType("SINGLE_TABLE") 
* @ORM\DiscriminatorColumn(name="discr", type="string") 
* @ORM\DiscriminatorMap({"user" = "User", "worker" = "Worker"}) 
* @ApiResource 
* 
*/ 
class User 
{ 
/** 
* @var int 
* 
* @ORM\Column(name="id", type="integer") 
* @ORM\Id 
* @ORM\GeneratedValue(strategy="AUTO") 
*/ 
protected $id; 

/** 
* @var string 
* 
* @ORM\Column(name="lastname", type="string", length=255) 
*/ 
protected $lastname; 

/** 
* @var string 
* 
* @ORM\Column(name="firstname", type="string", length=255) 
*/ 
protected $firstname; 


/** 
* Get id 
* 
* @return int 
*/ 
public function getId() 
{ 
    return $this->id; 
} 

/** 
* Set lastname 
* 
* @param string $lastname 
* @return User 
*/ 
public function setLastname($lastname) 
{ 
    $this->lastname = $lastname; 

    return $this; 
} 

/** 
* Get lastname 
* 
* @return string 
*/ 
public function getLastname() 
{ 
    return $this->lastname; 
} 

/** 
* Set firstname 
* 
* @param string $firstname 
* @return User 
*/ 
public function setFirstname($firstname) 
{ 
    $this->firstname = $firstname; 

    return $this; 
} 

/** 
* Get firstname 
* 
* @return string 
*/ 
public function getFirstname() 
{ 
    return $this->firstname; 
} 
} 


/** 
* Worker 
* 
* @ApiResource 
*/ 
class Worker extends User 
{ 

/** 
* @var \DateTime 
* 
* @ORM\Column(name="birthday", type="datetime") 
* @Assert\NotNull() 
* @Assert\DateTime() 
*/ 
private $birthday; 

/** 
* @var string 
* 
* @ORM\Column(name="mobilePhone", type="string", length=255, nullable=true) 
*/ 
private $mobilePhone; 

/** 
* @return \DateTime 
*/ 
public function getBirthday(): \DateTime 
{ 
    return $this->birthday; 
} 

/** 
* @param \DateTime $birthday 
*/ 
public function setBirthday(\DateTime $birthday) 
{ 
    $this->birthday = $birthday; 
} 

/** 
* @return string 
*/ 
public function getMobilePhone(): string 
{ 
    return ($this->mobilePhone == null) ? '' : $this->mobilePhone; 
} 

/** 
* @param string $mobilePhone 
*/ 
public function setMobilePhone(string $mobilePhone) 
{ 
    $this->mobilePhone = $mobilePhone; 
} 

} 

Und hier ist das Problem. Wir sehen, dass die Eigenschaften der Worker-Kindklasse im Modell der Benutzerklasse angezeigt werden. Und dass, wenn ich testen, sendet die POST-Methode eine User-Entität zurückgibt, die die Eigenschaften der Arbeiter Einheit enthält

The result to see the problem

Vielen Dank für alle

+0

zeigen Sie Ihre api doc Anmerkung bitte (für diesen Endpunkt) –

+0

Ich habe gerade diese Php-Datei mit Annotations – ascodix

Antwort

0

Ihre Serialisierung eine zusätzliche Ebene der Tiefe gehen muss Unterstützen Sie die Worker-Eigenschaften, die in der Antwort serialisiert werden. Ich bin mir nicht sicher, wie Sie es speziell für Ihre Implementierung verwenden können.

Mit JMS Serialization bundle, sieht das wie folgt aus:

/** 
* Get the Birthday.. 
* 
* @MaxDepth(2) 
* @return \DateTime 
*/ 
public function getBirthday(): \DateTime 
{ 
    return $this->birthday; 
}