Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/symfony/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
具有API平台Symfony的继承实体_Symfony_Api Platform.com - Fatal编程技术网

具有API平台Symfony的继承实体

具有API平台Symfony的继承实体,symfony,api-platform.com,Symfony,Api Platform.com,当我有一个从另一个实体继承的实体时,平台API()有问题。例如,从用户实体继承的工作实体。当我转到平台API文档时,所有Worker属性都显示在User类中 与其说它是一种解释,不如说它是一种模式。下面是我的两个实体和问题文档的结果 /** * User * * @ORM\Table(name="user") * @ORM\InheritanceType("SINGLE_TABLE") * @ORM\DiscriminatorColumn(name="discr", type="string"

当我有一个从另一个实体继承的实体时,平台API()有问题。例如,从用户实体继承的工作实体。当我转到平台API文档时,所有Worker属性都显示在User类中


与其说它是一种解释,不如说它是一种模式。下面是我的两个实体和问题文档的结果

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

}
这就是问题所在。我们看到Worker子类的属性出现在User类的模型中。当我测试发送POST方法时,它会返回一个包含工作者实体属性的用户实体


您的序列化需要进一步深入,以支持响应中序列化的工作属性。我不知道如何具体地使它为您的实现工作

对于,看起来是这样的:

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

请显示您的api文档注释(对于该端点)我只有这个带有注释的Php文件,所以Worker端点没有链接到另一个表?用户表中存储了额外的列?@ascodix您找到解决方案了吗?我也有同样的问题EJMS序列化程序与API平台不兼容。您应该使用Symfony的序列化程序设置MaxDepth。@StephanVierkant注意JMS序列化程序MaxDepth计算实际深度。SF序列化程序按顺序对类类型进行计数。因此,如果您使用“User->Company->User”获得MaxDepth 1,AP序列化程序将在“Company”停止,但SF序列化程序将通过循环引用异常停止,因为直接子项(MaxDepth)不是相同的实体,因此不是MaxDepth约束的一部分。(我只是花了太多时间试图正确地解决这个问题)。