/** * Process all routes defined * @param array $routes * @param ClassMetaData $metadata * @throws DrestException */ protected function processRoutes(array $routes, ClassMetaData $metadata) { $originFound = false; foreach ($routes as $route) { $routeMetaData = new RouteMetaData(); // Set name $route['name'] = preg_replace("/[^a-zA-Z0-9_\\s]/", "", $route['name']); if ($route['name'] == '') { throw DrestException::routeNameIsEmpty(); } if ($metadata->getRouteMetaData($route['name']) !== false) { throw DrestException::routeAlreadyDefinedWithName($metadata->getClassName(), $route['name']); } $routeMetaData->setName($route['name']); // Set verbs (will throw if invalid) if (isset($route['verbs'])) { $routeMetaData->setVerbs($route['verbs']); } if (isset($route['collection'])) { $routeMetaData->setCollection($route['collection']); } // Add the route pattern $routeMetaData->setRoutePattern($route['routePattern']); if (isset($route['routeConditions']) && is_array($route['routeConditions'])) { $routeMetaData->setRouteConditions($route['routeConditions']); } // Set the exposure array if (isset($route['expose']) && is_array($route['expose'])) { $routeMetaData->setExpose($route['expose']); } // Set disable expose lookup if (isset($route['disableExpose'])) { $routeMetaData->setDisableExpose((bool) $route['disableExpose']); } // Set the allow options value if (isset($route['allowOptions'])) { $routeMetaData->setAllowedOptionRequest($route['allowOptions']); } // If the origin flag is set, set the name on the class meta data if (isset($route['origin']) && !is_null($route['origin'])) { if ($originFound) { throw DrestException::resourceCanOnlyHaveOneRouteSetAsOrigin(); } $metadata->originRouteName = $route['name']; $originFound = true; } $metadata->addRouteMetaData($routeMetaData); } }
/** * Process the method * @param $methods * @param Mapping\ClassMetaData $metadata * @throws DrestException */ protected function processMethods($methods, Mapping\ClassMetaData $metadata) { // Set the handle calls foreach ($methods as $method) { /* @var \ReflectionMethod $method */ if ($method->isPublic()) { foreach ($this->reader->getMethodAnnotations($method) as $methodAnnotation) { if ($methodAnnotation instanceof Annotation\Handle) { // Make sure the for is not empty if (empty($methodAnnotation->for) || !is_string($methodAnnotation->for)) { throw DrestException::handleForCannotBeEmpty(); } if (($routeMetaData = $metadata->getRouteMetaData($methodAnnotation->for)) === false) { throw DrestException::handleAnnotationDoesntMatchRouteName($methodAnnotation->for); } if ($routeMetaData->hasHandleCall()) { // There is already a handle set for this route throw DrestException::handleAlreadyDefinedForRoute($routeMetaData); } $routeMetaData->setHandleCall($method->getName()); } } } } }
/** * Process the method * @param $resource * @param Mapping\ClassMetaData $metadata * @throws DrestException */ protected function processMethods($resource, Mapping\ClassMetaData $metadata) { /* @var \ReflectionMethod $method */ foreach ($resource['routes'] as $route) { // Make sure the for is not empty if (!isset($route['name']) || !is_string($route['name'])) { throw DrestException::handleForCannotBeEmpty(); } if (($routeMetaData = $metadata->getRouteMetaData($route['name'])) === false) { throw DrestException::handleAnnotationDoesntMatchRouteName($route['name']); } if ($routeMetaData->hasHandleCall()) { // There is already a handle set for this route throw DrestException::handleAlreadyDefinedForRoute($routeMetaData); } // Set the handle if (isset($route['handle_call'])) { $routeMetaData->setHandleCall($route['handle_call']); } } }