예제 #1
0
 /**
  * Reformat request data to be compatible with method specified interface: <br/>
  * - sort arguments in correct order <br/>
  * - set default values for omitted arguments
  * - instantiate objects of necessary classes
  *
  * @param string|object $classOrObject Resource class name
  * @param string $methodName Resource method name
  * @param array $requestData Data to be passed to method
  * @param Mage_Webapi_Model_ConfigAbstract $apiConfig
  * @return array Array of prepared method arguments
  * @throws Mage_Webapi_Exception
  */
 public function prepareMethodParams($classOrObject, $methodName, $requestData, Mage_Webapi_Model_ConfigAbstract $apiConfig)
 {
     $methodReflection = self::createMethodReflection($classOrObject, $methodName);
     $methodData = $apiConfig->getMethodMetadata($methodReflection);
     $methodArguments = array();
     if (isset($methodData['interface']['in']['parameters']) && is_array($methodData['interface']['in']['parameters'])) {
         foreach ($methodData['interface']['in']['parameters'] as $paramName => $paramData) {
             if (isset($requestData[$paramName])) {
                 $methodArguments[$paramName] = $this->_formatParamData($requestData[$paramName], $paramData['type'], $apiConfig);
             } elseif (!$paramData['required']) {
                 $methodArguments[$paramName] = $paramData['default'];
             } else {
                 throw new Mage_Webapi_Exception($this->__('Required parameter "%s" is missing.', $paramName), Mage_Webapi_Exception::HTTP_BAD_REQUEST);
             }
         }
     }
     return $methodArguments;
 }