routeRequiresHandle() public static method

public static routeRequiresHandle ( string $name ) : DrestException
$name string
return DrestException
Beispiel #1
0
 /**
  * Check handle calls.
  * @param array $routeMetaDataArray
  * @throws DrestException
  */
 public function checkHandleCalls($routeMetaDataArray)
 {
     // Error for any push metadata routes that don't have a handle
     foreach ($routeMetaDataArray as $routeMetaData) {
         /* @var RouteMetaData $routeMetaData */
         if ($routeMetaData->needsHandleCall() && !$routeMetaData->hasHandleCall()) {
             throw DrestException::routeRequiresHandle($routeMetaData->getName());
         }
     }
 }
 /**
  * Load metadata for a class name
  * @param  object|string         $class - Pass in either the class name, or an instance of that class
  * @return Mapping\ClassMetaData $metaData - return null if metadata couldn't be populated from annotations
  * @throws DrestException
  */
 public function loadMetadataForClass($class)
 {
     $resourceFound = false;
     if (is_string($class)) {
         $class = new \ReflectionClass($class);
     }
     $metadata = new Mapping\ClassMetaData($class);
     foreach ($this->reader->getClassAnnotations($class) as $annotatedObject) {
         if ($annotatedObject instanceof Annotation\Resource) {
             $resourceFound = true;
             $originFound = false;
             if ($annotatedObject->routes === null) {
                 throw DrestException::annotatedResourceRequiresAtLeastOneServiceDefinition($class->name);
             }
             $metadata->addRepresentations($annotatedObject->representations);
             foreach ($annotatedObject->routes as $route) {
                 $routeMetaData = new Mapping\RouteMetaData();
                 // Set name
                 $route->name = preg_replace("/[^a-zA-Z0-9_\\s]/", "", $route->name);
                 if ($route->name == '') {
                     throw DrestException::routeNameIsEmpty();
                 }
                 if ($metadata->getRoutesMetaData($route->name) !== false) {
                     throw DrestException::routeAlreadyDefinedWithName($class->name, $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 (is_array($route->routeConditions)) {
                     $routeMetaData->setRouteConditions($route->routeConditions);
                 }
                 // Set the exposure array
                 if (is_array($route->expose)) {
                     $routeMetaData->setExpose($route->expose);
                 }
                 // Set the allow options value
                 if (isset($route->allowOptions)) {
                     $routeMetaData->setAllowedOptionRequest($route->allowOptions);
                 }
                 // Add action class
                 if (isset($route->action)) {
                     $routeMetaData->setActionClass($route->action);
                 }
                 // If the origin flag is set, set the name on the class meta data
                 if (!is_null($route->origin)) {
                     if ($originFound) {
                         throw DrestException::resourceCanOnlyHaveOneRouteSetAsOrigin();
                     }
                     $metadata->originRouteName = $route->name;
                     $originFound = true;
                 }
                 $metadata->addRouteMetaData($routeMetaData);
             }
             // Set the handle calls
             foreach ($class->getMethods() 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->getRoutesMetaData($methodAnnotation->for)) === false) {
                                 throw DrestException::handleAnnotationDoesntMatchRouteName($methodAnnotation->for);
                             }
                             if ($routeMetaData->hasHandleCall()) {
                                 // There is already a handle set for this route
                                 throw DrestException::alreadyHandleDefinedForRoute($routeMetaData);
                             }
                             $routeMetaData->setHandleCall($method->getName());
                             $routeMetaData->setInjectRequestIntoHandle($methodAnnotation->injectRequest);
                         }
                     }
                 }
             }
             // Error for any push metadata routes that don't have a handle
             foreach ($metadata->getRoutesMetaData() as $routeMetaData) {
                 /* @var RouteMetaData $routeMetaData */
                 if ($routeMetaData->needsHandleCall() && !$routeMetaData->hasHandleCall()) {
                     throw DrestException::routeRequiresHandle($routeMetaData->getName());
                 }
             }
         }
     }
     return $resourceFound ? $metadata : null;
 }