arrayCollection元素

时间:2017-04-08 15:30:08

标签: php symfony

如何从Object的arrayCollection访问元素? EXP:

Class Addresses
{
    private $country;
    private $code;

    public function getCountry()
    {
        //...
    }

    public function getCode()
    {
        //...
    }
}

Class Person{


    public function getAddresses()
    {
        // return ArrayCollection $addresses;
    }
}

现在访问人员地址(如果存在)我必须这样做:

$addressArray = $accessor->getValue($person, 'Addesses');
foreach ($addressArray as $address){
    $outputArray['country'][] = $accessor->getValue($address, 'country');
}

但似乎访问者不接受arrayCollection。这是真的吗?否则我所犯的错误是什么?

3 个答案:

答案 0 :(得分:1)

根据您的评论,您可以在尝试循环之前检查返回的类型是否为ArrayCollection的实例。

$address = $person->getAddress();
if ($address instanceof ArrayCollection) {
    foreach($address as $key => $value) {
        //do your stuff
    }
}

如果你没有访问者,我就不知道它增加了什么优势。

答案 1 :(得分:0)

问题在于您的属性路径:addresses而不是person.Addessescountry而不是address.country

更新

我非常确定PropertyAccessor可以返回ArrayCollection或者您希望从数据模型返回的内容。访问者不做任何将返回的决定,哪些不会。但是我无法帮助你解决这个问题,因为示例代码缺乏信息并且有自己的错误。

正如答案所示,您的财产路径中的问题仍然存在。它应该是addresses而不是Addesses,而您的Person类应该是:

class Addresses
{
    private $country;

    public function getCountry()
    {
        return $this->country;
    }
}

class Person
{
    /**
     * @var Collection|Addresses[]
     */
    private $addresses;

    public function __construct()
    {
        $this->addresses = new ArrayCollection();
    }

    public function getAddresses()
    {
        return $this->addresses;
    }
}

// Example usage
$person = new Person();
$accessor = new PropertyAccessor();
$addresses = $accessor->getValue($person, 'addresses');

if (!($addresses instanceof Collection)) {
    die('Impossible');
}

更新你的代码作为我的例子abow。如果您仍然有任何错误,请显示错误消息,模型中的详细代码以及您如何调用它们......我可以提供帮助。

答案 2 :(得分:0)

当前,属性访问器支持集合的读写。 这可以通过以下方法实现。

$accessor = new PropertyAccessor();
$accessor->getValue($person, 'addresses[0].country');