예제 #1
0
 /**
  * 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);
     }
 }
예제 #2
0
 /**
  * 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());
                 }
             }
         }
     }
 }
예제 #3
0
파일: PhpDriver.php 프로젝트: nuxwin/drest
 /**
  * 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']);
         }
     }
 }