/**
  * 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');
 }
예제 #2
0
 /**
  * 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;
 }