/** * Fetch data from request and prepare it for passing to specified action. * * @param object $controllerInstance * @param string $action * @return array */ public function fetchRequestData($controllerInstance, $action) { $methodReflection = Mage_Webapi_Helper_Data::createMethodReflection($controllerInstance, $action); $methodName = $this->_configHelper->getMethodNameWithoutVersionSuffix($methodReflection); $bodyParamName = $this->_configHelper->getOperationBodyParamName($methodReflection); $requestParams = array_merge($this->_request->getParams(), array($bodyParamName => $this->_getRequestBody($methodName))); /** Convert names of ID and Parent ID params in request to those which are used in method interface. */ $idArgumentName = $this->_configHelper->getOperationIdParamName($methodReflection); $parentIdParamName = Mage_Webapi_Controller_Router_Route_Rest::PARAM_PARENT_ID; $idParamName = Mage_Webapi_Controller_Router_Route_Rest::PARAM_ID; if (isset($requestParams[$parentIdParamName]) && $idArgumentName != $parentIdParamName) { $requestParams[$idArgumentName] = $requestParams[$parentIdParamName]; unset($requestParams[$parentIdParamName]); } elseif (isset($requestParams[$idParamName]) && $idArgumentName != $idParamName) { $requestParams[$idArgumentName] = $requestParams[$idParamName]; unset($requestParams[$idParamName]); } return $this->_apiHelper->prepareMethodParams($controllerInstance, $action, $requestParams, $this->_apiConfig); }
/** * Retrieve the list of names of required params except ID and Request body. * * @param ReflectionMethod $methodReflection * @return array */ protected function _getAdditionalRequiredParamNames(ReflectionMethod $methodReflection) { $paramNames = array(); $methodInterfaces = $methodReflection->getPrototypes(); /** Take the fullest interface that includes optional parameters also. */ /** @var \Zend\Server\Reflection\Prototype $methodInterface */ $methodInterface = end($methodInterfaces); $methodParams = $methodInterface->getParameters(); $idParamName = $this->_helper->getOperationIdParamName($methodReflection); $bodyParamName = $this->_helper->getOperationBodyParamName($methodReflection); /** @var ReflectionParameter $paramReflection */ foreach ($methodParams as $paramReflection) { if (!$paramReflection->isOptional() && $paramReflection->getName() != $bodyParamName && $paramReflection->getName() != $idParamName) { $paramNames[] = $paramReflection->getName(); } } return $paramNames; }
public function testGetIdParamException() { $className = 'Vendor_Module_Webapi_Resource_Invalid'; $this->setExpectedException('LogicException', sprintf('"%s" is not a valid resource class.', $className)); $this->_helper->getOperationIdParamName(Mage_Webapi_Helper_Data::createMethodReflection($className, 'updateV1')); }