如何从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。这是真的吗?否则我所犯的错误是什么?
答案 0 :(得分:1)
根据您的评论,您可以在尝试循环之前检查返回的类型是否为ArrayCollection
的实例。
$address = $person->getAddress();
if ($address instanceof ArrayCollection) {
foreach($address as $key => $value) {
//do your stuff
}
}
如果你没有访问者,我就不知道它增加了什么优势。
答案 1 :(得分:0)
问题在于您的属性路径:addresses
而不是person.Addesses
和country
而不是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');