Esempio n. 1
0
 /**
  * @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;
 }
Esempio n. 2
0
 /**
  * @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;
 }