/** * @param Http\Request\Parameters\Included $included */ protected function filterOutIncludedResources(Included $included) { if (false === $included->isEmpty()) { foreach ($included->get() as $resource => $includeData) { foreach ($this->serializationStrategy->getMappings() as $mapping) { $mapping->filteringIncludedResources(true); if (is_array($includeData)) { foreach ($includeData as $subResource) { $this->serializationStrategy->getMappingByAlias($subResource)->addIncludedResource($this->serializationStrategy->getMappingByAlias($resource)->getClassName()); } break; } $mapping->addIncludedResource($this->serializationStrategy->getMappingByAlias($resource)->getClassName()); } } } }
/** * @param JsonApiSerializer $serializer * @param Included $included * @param string $paramName * @param ErrorBag $errorBag */ protected static function validateIncludeParams(JsonApiSerializer $serializer, Included $included, $paramName, ErrorBag $errorBag) { $transformer = $serializer->getTransformer(); foreach ($included->get() as $resource => $data) { if (null == $transformer->getMappingByAlias($resource)) { $errorBag[] = new InvalidParameterError($resource, strtolower($paramName)); continue; } if (is_array($data)) { foreach ($data as $subResource) { if (null == $transformer->getMappingByAlias($subResource)) { $errorBag[] = new InvalidParameterError($subResource, strtolower($paramName)); } } } } }
/** * @param JsonApiSerializer $serializer * @param Included $included * @param string $paramName */ protected function validateIncludeQueryParamsTypes($serializer, Included $included, $paramName) { if (false === $included->isEmpty()) { $validateFields = array_keys($included->get()); foreach ($validateFields as $key => $field) { $mapping = $serializer->getTransformer()->getMappingByAlias($field); if (null !== $mapping) { $properties = $this->getPropertiesFromMapping($mapping); $invalidProperties = array_diff($included->get()[$field], $properties); $this->addInvalidParameterMemberErrorsToErrorBag($invalidProperties, $paramName, $field); unset($validateFields[$key]); } } $this->addInvalidParameterErrorsToErrorBag($paramName, $validateFields); } }
/** * Build the URL. * * @param string $route * @param int $pageNumber * @param int $pageSize * @param Fields $fields * @param Sorting $sorting * @param Included $included * @param array $filters * * @return string */ protected function pagePaginatedRoute($route, $pageNumber, $pageSize, Fields $fields, Sorting $sorting, Included $included, $filters) { $fieldKeys = []; if (false === $fields->isEmpty()) { $fieldKeys = $fields->get(); foreach ($fieldKeys as &$v) { $v = implode(',', $v); } } $queryParams = urldecode(http_build_query(array_filter(['page' => array_filter(['number' => $pageNumber, 'size' => $pageSize]), 'fields' => $fieldKeys, 'filter' => $filters, 'sort' => $sorting->get(), 'include' => $included->get()]))); $expression = $route[strlen($route) - 1] === '?' || $route[strlen($route) - 1] === '&' ? '%s%s' : '%s?%s'; return sprintf($expression, $route, $queryParams); }
public function testGet() { $this->assertEquals(['employee' => ['name'], 'order' => ['employee']], $this->included->get()); }