/** * Test Resource::getProperty(). */ public function testGetProperty() { $this->assertEquals('test-id', $this->resource['id']); $this->assertEquals('test name', $this->resource->getProperty('name')); $this->setExpectedException('\\InvalidArgumentException'); $this->resource->getProperty('nonexistent'); }
/** * Get a nested property of a resource, via a dot-separated string path. * * @param ApiResource $resource * @param string $propertyPath * @param bool $lazyLoad * * @throws \InvalidArgumentException if the property is not found. * * @return mixed */ public static function getNestedProperty(ApiResource $resource, $propertyPath, $lazyLoad = true) { if (!strpos($propertyPath, '.')) { return $resource->getProperty($propertyPath, true, $lazyLoad); } $parents = explode('.', $propertyPath); $propertyName = array_shift($parents); $property = $resource->getProperty($propertyName, true, $lazyLoad); if (!is_array($property)) { throw new \InvalidArgumentException(sprintf('Invalid path "%s": the property "%s" is not an array.', $propertyPath, $propertyName)); } $value = Util::getNestedArrayValue($property, $parents, $keyExists); if (!$keyExists) { throw new \InvalidArgumentException('Property not found: ' . $propertyPath); } return $value; }