Example #1
0
 /**
  * Generate routing logic function.
  *
  * @param string $functionName Function name
  * @return string Routing logic function PHP code
  */
 public function generate($functionName = Core::ROUTING_LOGIC_FUNCTION)
 {
     $this->generator->defFunction($functionName, array('$path', '$method'))->defVar('$matches', array())->newLine('$path = strtok(rtrim($method.\'/\'.ltrim($path, \'/\'),\'/\'),\'?\');')->defVar('$parameters', array());
     // Perform routing logic generation
     $this->innerGenerate2($this->logic);
     $this->generator->newLine('return null;')->endFunction();
     return $this->generator->flush();
 }
Example #2
0
 /**
  * Read class metadata and fill internal collections.
  *
  * @param ClassMetadata[] $classesMetadata
  * @return ClassMetadata[] Processed class metadata
  */
 public function processClassMetadata(array $classesMetadata) : array
 {
     /** @var ClassMetadata[] $processedClassesMetadata */
     $processedClassesMetadata = [];
     // Read all classes in given file
     foreach ($classesMetadata as $classMetadata) {
         // Store by metadata name as alias
         $this->classAliases[$classMetadata->className] = $classMetadata->name;
         // Store class in defined scopes
         foreach ($classMetadata->scopes as $scope) {
             $this->scopes[$scope][$classMetadata->name] = $classMetadata->className;
         }
         $processedClassesMetadata[$classMetadata->name] = $classMetadata;
     }
     $dependencies = [];
     foreach ($processedClassesMetadata as $alias => $classMetadata) {
         if (count($classMetadata->methodsMetadata)) {
             foreach ($classMetadata->methodsMetadata as $methodMetadata) {
                 foreach ($methodMetadata->dependencies as $dependency) {
                     if (in_array($this->getArgumentType($dependency), [1, 2], true)) {
                         $dependencies[] = $dependency;
                     }
                 }
             }
             $dependencies[] = $classMetadata->name;
         }
         if (count($classMetadata->propertiesMetadata)) {
             foreach ($classMetadata->propertiesMetadata as $propertyMetadata) {
                 $dependencies[] = $propertyMetadata->dependency;
             }
             $dependencies[] = $classMetadata->name;
         }
         if (count($classMetadata->scopes)) {
             $dependencies[] = $classMetadata->name;
         }
     }
     $dependencies = array_unique($dependencies);
     foreach ($processedClassesMetadata as $alias => $classMetadata) {
         if (!in_array($alias, $dependencies, true)) {
             unset($processedClassesMetadata[$alias]);
         }
     }
     $this->generator->flush();
     return $processedClassesMetadata;
 }
Example #3
0
 /**
  * Generate routing logic function.
  *
  * @param string $functionName Function name
  * @return string Routing logic function PHP code
  */
 public function generate($functionName = Core::ROUTING_LOGIC_FUNCTION)
 {
     $this->generator->defFunction($functionName, array('$path', '$method'))->defVar('$matches', array())->defVar('$parameters', array());
     // Do not generate if we have no http methods supported
     if (count($this->httpMethods)) {
         // Build routes for first method
         $this->buildRoutesByMethod(array_shift($this->httpMethods));
         // Build routes for other methods
         foreach ($this->httpMethods as $method) {
             // Build routes for first method
             $this->buildRoutesByMethod($method, 'defElseIfCondition');
         }
         // Add method not found
         $this->generator->endIfCondition();
     }
     // Add method not found
     $this->generator->newLine('return null;')->endFunction();
     return $this->generator->flush();
 }