Esempio n. 1
0
 public function testGetIdentifier()
 {
     $manager = new Manager();
     $resource = new Item(array('name' => 'Larry Ullman'), function () {
     });
     $scope = new Scope($manager, $resource, 'book');
     $this->assertEquals('book', $scope->getIdentifier());
     $childScope = $scope->embedChildScope('author', $resource);
     $this->assertEquals('book.author', $childScope->getIdentifier());
     $grandChildScope = $childScope->embedChildScope('profile', $resource);
     $this->assertEquals('book.author.profile', $grandChildScope->getIdentifier());
 }
 protected function callIncludeMethod(Scope $scope, $includeName, $data)
 {
     $scopeIdentifier = $scope->getIdentifier($includeName);
     $params = $scope->getManager()->getIncludeParams($scopeIdentifier);
     // Check if the method name actually exists
     $methodName = 'include' . str_replace(' ', '', ucwords(str_replace('_', ' ', str_replace('-', '', $includeName))));
     $resource = call_user_func(array($this, $methodName), $data, $params);
     if ($resource === null) {
         return false;
     }
     if (!$resource instanceof ResourceAbstract) {
         throw new \Exception(sprintf('Invalid return value from %s::%s(). Expected %s, received %s.', __CLASS__, $methodName, 'League\\Fractal\\Resource\\ResourceAbstract', gettype($resource)));
     }
     return $resource;
 }
Esempio n. 3
0
 /**
  * Call method for retrieving a relation. This method overrides Fractal's own
  * [callIncludeMethod] method to load relations directly from your models.
  *
  * @param  Scope  $scope
  * @param  string $includeName
  * @param  mixed  $data
  * @return \League\Fractal\Resource\ResourceInterface|bool
  * @throws \Exception
  */
 protected function callIncludeMethod(Scope $scope, $includeName, $data)
 {
     if ($includeName === 'pivot') {
         return $this->includePivot($data->{$includeName});
     }
     $params = $scope->getManager()->getIncludeParams($scope->getIdentifier($includeName));
     if (method_exists($this, $includeName)) {
         $include = call_user_func([$this, $includeName], $data, $params);
         if ($include instanceof ResourceAbstract) {
             return $include;
         }
         return app(Responder::class)->transform($include)->getResource();
     } else {
         return app(Responder::class)->transform($data->{$includeName})->getResource();
     }
 }