Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/266.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
Php symfony序列化程序能否反序列化返回子实体类型的嵌套实体?_Php_Symfony_Serialization_Doctrine Orm - Fatal编程技术网

Php symfony序列化程序能否反序列化返回子实体类型的嵌套实体?

Php symfony序列化程序能否反序列化返回子实体类型的嵌套实体?,php,symfony,serialization,doctrine-orm,Php,Symfony,Serialization,Doctrine Orm,当我反序列化我的条令实体时,初始对象被正确构造/启动,但是所有子关系都试图被称为数组 正在调用根级别对象的addChild(ChildEntity$entity)方法,但Symfony抛出了一个错误,即addChild正在接收数组,而不是ChildEntity的实例 Symfony自己的序列化程序是否有办法将嵌套数组(子实体)反序列化为实体类型 JMS序列化程序通过在属性上指定@Type(“ArrayCollection”)注释来处理此问题。我认为与JMS序列化程序相比,Symfony序列化程序

当我反序列化我的条令实体时,初始对象被正确构造/启动,但是所有子关系都试图被称为数组

正在调用根级别对象的
addChild(ChildEntity$entity)
方法,但Symfony抛出了一个错误,即addChild正在接收数组,而不是ChildEntity的实例

Symfony自己的序列化程序是否有办法将嵌套数组(子实体)反序列化为实体类型


JMS序列化程序通过在属性上指定
@Type(“ArrayCollection”)
注释来处理此问题。

我认为与JMS序列化程序相比,Symfony序列化程序试图最小化,因此您可能必须为类实现自己的反规范化程序。您可以看到如何操作。

可能有一种更简单的方法,但到目前为止,对于Symfony,我正在为对象数组使用鉴别器接口注释和类型属性。它还可以在一个数组中处理多种类型(MongoDB):

父对象需要将属性定义为接口,并获取、添加、删除方法:

    /**
     * @var BlogContentInterface[]
     */
    protected $contents = [];
    
    /**
     * @return BlogContentInterface[]
     */
    public function getContents(): array
    {
        return $this->contents;
    }

    /**
     * @param BlogContentInterface[] $contents
     */
    public function setContents($contents): void
    {
        $this->contents = $contents;
    }

    /**
     * @param BlogContentInterface $content
     */
    public function addContent(BlogContentInterface $content): void
    {
        $this->contents[] = $content;
    }

    /**
     * @param BlogContentInterface $content
     */
    public function removeContent(BlogContentInterface $content): void
    {
        $index = array_search($content, $this->contents);
        if ($index !== false) {
            unset($this->contents[$index]);
        }
    }

嘿,你找到办法了吗?
    /**
     * @var BlogContentInterface[]
     */
    protected $contents = [];
    
    /**
     * @return BlogContentInterface[]
     */
    public function getContents(): array
    {
        return $this->contents;
    }

    /**
     * @param BlogContentInterface[] $contents
     */
    public function setContents($contents): void
    {
        $this->contents = $contents;
    }

    /**
     * @param BlogContentInterface $content
     */
    public function addContent(BlogContentInterface $content): void
    {
        $this->contents[] = $content;
    }

    /**
     * @param BlogContentInterface $content
     */
    public function removeContent(BlogContentInterface $content): void
    {
        $index = array_search($content, $this->contents);
        if ($index !== false) {
            unset($this->contents[$index]);
        }
    }