/** * @throws FREST\Exception */ protected function setupResourceFunction() { $resourceFunctions = $this->resource->getResourceFunctions(); // check if valid Func name if (!isset($resourceFunctions) || !isset($resourceFunctions[$this->resourceFunctionName])) { throw new FREST\Exception(FREST\Exception::ResourceFunctionDoesntExist, "Function name: '{$this->resourceFunctionName}'"); } /** @var Func\Resource $resourceFunction */ $resourceFunction = $resourceFunctions[$this->resourceFunctionName]; $resourceFunctionParameters = $resourceFunction->getParameters(); // check method $requiredMethod = $resourceFunction->getMethod(); $currentMethod = $this->frest->getMethod(); if ($requiredMethod != $currentMethod) { $currentMethodString = Type\Method::getString($currentMethod); $requiredMethodString = Type\Method::getString($requiredMethod); throw new FREST\Exception(FREST\Exception::MismatchingResourceFunctionMethod, "Requires '{$requiredMethodString}' but using '{$currentMethodString}'"); } // check for invalid parameters and build parameter list for Func $functionParameters = array(); foreach ($this->parameters as $parameterName => $value) { $isValidMiscParam = isset($this->miscParameters[$parameterName]); if (!$isValidMiscParam) { if (!isset($resourceFunctionParameters[$parameterName])) { throw new FREST\Exception(FREST\Exception::InvalidFunctionParameter, "Parameter name: '{$parameterName}'"); } $functionParameters[$parameterName] = $value; } } if (isset($resourceFunctionParameters) && count($resourceFunctionParameters) > 0) { // check for all required parameters /** @var Func\FunctionParam $parameter */ $missingParameterNames = array(); foreach ($resourceFunctionParameters as $parameterName => $parameter) { // check type if (isset($functionParameters[$parameterName])) { $variableType = $parameter->getVariableType(); $value = $functionParameters[$parameterName]; $castedValue = Type\Variable::castValue($value, $variableType); if (!isset($castedValue)) { $typeString = Type\Variable::getString($variableType); throw new FREST\Exception(FREST\Exception::InvalidType, "Expecting parameter '{$parameterName}' to be of type '{$typeString}' but received '{$value}'"); } $functionParameters[$parameterName] = $castedValue; } else { if ($parameter->getRequired()) { $missingParameterNames[] = $parameterName; } } } if (count($missingParameterNames) > 0) { $missingString = implode(', ', $missingParameterNames); throw new FREST\Exception(FREST\Exception::MissingRequiredFunctionParameter, "Parameter name: '{$missingString}'"); } } // Check for Func implementation existence if (!method_exists($this->resource, $this->resourceFunctionName)) { throw new FREST\Exception(FREST\Exception::ResourceFunctionMissing, "Function name: '{$this->resourceFunctionName}', resource: '{$this->resource->getName()}'"); } if ($resourceFunction->getRequiresResourceID()) { $functionParameters['resourceID'] = $this->resourceID; } $this->resourceFunction = $resourceFunction; $this->resourceFunctionParameters = $functionParameters; }
/** * @param FREST\Resource $loadedResource * @param Setting\Read $responsibleReadSetting * * @return array */ protected function getLoadedResourceReadSettings($loadedResource, $responsibleReadSetting) { $resourceName = $loadedResource->getName(); if (!isset($this->loadedResourceReadSettings[$resourceName])) { $parameters = array(); if ($responsibleReadSetting instanceof Setting\SingularResourceRead) { $aliasesToRead = $responsibleReadSetting->getAliasesToRead(); if (isset($aliasesToRead)) { $parameters['fields'] = implode(',', $aliasesToRead); } } else { if ($responsibleReadSetting instanceof Setting\ComputedRead) { $requiredAliases = $responsibleReadSetting->getRequiredAliases(); if (isset($requiredAliases)) { $parameters['fields'] = implode(',', $requiredAliases); } } } $readSettings = $this->generateReadSettings($loadedResource, $parameters); $this->loadedResourceReadSettings[$resourceName] = $readSettings; } else { $readSettings = $this->loadedResourceReadSettings[$resourceName]; } return $readSettings; }