protected function entity($path)
{
if ($path === null) {
return $this->_context['entity'];
}
$oneElement = count($path) === 1;
if ($oneElement && $this->_isCollection) {
return false;
}
$entity = $this->_context['entity'];
if ($oneElement) {
return $entity;
}
if ($path[0] === $this->_rootName) {
$path = array_slice($path, 1);
}
$len = count($path);
$last = $len - 1;
for ($i = 0; $i < $len; $i++) {
$prop = $path[$i];
$next = $this->getProp($entity, $prop);
$isLast = $i === $last;
if (!$isLast && $next === null && $prop !== '_ids') {
return false;
}
$isTraversable = is_array($next) || $next instanceof Traversable || $next instanceof Document;
if ($isLast || !$isTraversable) {
return $entity;
}
$entity = $next;
}
throw new RuntimeException(sprintf('Unable to fetch property "%s"', implode(".", $path)));
}