Php besimplesoapbundle-annotation:处理复杂类型中的循环引用

Php besimplesoapbundle-annotation:处理复杂类型中的循环引用,php,symfony,soap,doctrine,Php,Symfony,Soap,Doctrine,我正在使用BeSimple SoapBundle创建一个SOAP服务器,但以下代码有问题: namespace AppBundle\Entity; use BeSimple\SoapBundle\ServiceDefinition\Annotation as Soap; /** * @Soap\Alias("Item") */ class Item { /** * @Soap\ComplexType("AppBundle\Entity\Item[]") */

我正在使用BeSimple SoapBundle创建一个SOAP服务器,但以下代码有问题:

namespace AppBundle\Entity;

use BeSimple\SoapBundle\ServiceDefinition\Annotation as Soap;

/**
 * @Soap\Alias("Item")
 */
class Item
{

    /**
     * @Soap\ComplexType("AppBundle\Entity\Item[]")
     */
    protected $items;

    /**
     * @Soap\ComplexType("string")
     */
    protected $name;
我需要得到的是complextype项的树,但是在使用注释@Soap\complextype(“AppBundle\Entity\Item[])时,我得到了一个循环引用错误


你知道我该怎么处理这种情况吗

我终于找到了解决这个问题的方法。我认为这是不必要的,但这是我找到的最好也是唯一的方法

namespace AppBundle\Entity;

use BeSimple\SoapBundle\ServiceDefinition\Annotation as Soap;

/**
 * @Soap\Alias("ComplexItem")
 */
class ComplexItem extends Item
{        
    /**
     * @Soap\ComplexType("AppBundle\Entity\Item")
     */
    protected $item;

    public function setItem($item)
    {
        $this->item = $item;
    }

控制器使用示例:

/**
 * @Soap\Method("getItem")
 * @Soap\Result(phpType = "AppBundle\Entity\ComplexItem")
 */
public function getItem()
{
    $item = new ComplexItem();
    $complexItem = new ComplexItem();
    $complexItem->setItem($item);

    return $complexItem;
}

希望它能帮助别人。如果您知道更好的解决方法,请告诉我。

我终于找到了解决此问题的方法。我认为这是不必要的,但这是我找到的最好也是唯一的方法

namespace AppBundle\Entity;

use BeSimple\SoapBundle\ServiceDefinition\Annotation as Soap;

/**
 * @Soap\Alias("ComplexItem")
 */
class ComplexItem extends Item
{        
    /**
     * @Soap\ComplexType("AppBundle\Entity\Item")
     */
    protected $item;

    public function setItem($item)
    {
        $this->item = $item;
    }

控制器使用示例:

/**
 * @Soap\Method("getItem")
 * @Soap\Result(phpType = "AppBundle\Entity\ComplexItem")
 */
public function getItem()
{
    $item = new ComplexItem();
    $complexItem = new ComplexItem();
    $complexItem->setItem($item);

    return $complexItem;
}
希望它能帮助别人。如果你知道更好的解决方法,请告诉我