Example #1
0
$httpClient = new \GuzzleHttp\Client();
// HttpClient Repositories
$userRepository = new \Infrastructure\Repository\HttpClient\HttpClientUserRepository($httpClient, $baseUri);
$pictureRepository = new \Infrastructure\Repository\HttpClient\HttpClientPictureRepository($httpClient, $baseUri);
// Query Executor
$queryExecutor = new \Document\Query\QueryExecutor();
// LinkedElements for a User Resource
$userLinkedElements = [new \Application\QueryService\User\LinkedElement\UserHasFriends(), new \Application\QueryService\User\LinkedElement\UserHasPictures(), new \Application\QueryService\User\LinkedElement\UserHasOneLargePicture(), new \Application\QueryService\User\LinkedElement\UserHasOneMediumPicture(), new \Application\QueryService\User\LinkedElement\UserHasOneSmallPicture()];
// Serializers
$userSerializer = new \Application\QueryService\User\Serializer\UserSerializer($queryExecutor);
foreach ($userLinkedElements as $userLinkedElement) {
    $userSerializer->addLinkedElement($userLinkedElement);
}
$pictureSerializer = new \Application\QueryService\Picture\Serializer\PictureSerializer($queryExecutor);
// Query handlers
$queryHandlers = [new \Application\QueryService\Picture\PictureQueryHandler($pictureRepository, $pictureSerializer), new \Application\QueryService\Picture\PicturesQueryHandler($pictureRepository, $pictureSerializer), new \Application\QueryService\User\UserQueryHandler($userRepository, $userSerializer), new \Application\QueryService\User\FriendsQueryHandler($userRepository, $userSerializer)];
// Add handlers into the Query Executor
foreach ($queryHandlers as $queryHandler) {
    $queryExecutor->addHandler($queryHandler);
}
// Resolve a Query
$user = $queryExecutor->execute(new \Application\QueryService\User\UserQuery(1));
// Link resources (user's friends and a small picture for each friends)
$user->with(['friends', 'friends.picture_small']);
// Sparse Fieldsets (filter fields for each resources)
$user->fields(['users' => ['name', 'surname', 'email'], 'pictures' => ['format', 'url']]);
// Prepare a JsonApi (v1.0) Document
$document = new \Document\Document($user);
$document->addMeta('meta_key', 'meta_value');
// Encode the document to JSON
print json_encode($document, JSON_PRETTY_PRINT);
Example #2
0
 public function assignAttributes(array $attributes, $withoutProtection = false)
 {
     $assocs = $this->getAssociations();
     foreach ($assocs->embedded() as $name => $type) {
         if ($type == 'hasMany' && isset($attributes[$name])) {
             $this->{$name}()->set($attributes[$name]);
             unset($attributes[$name]);
         }
     }
     return parent::assignAttributes($attributes, $withoutProtection);
 }