/** * 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(); }
/** * 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; }
/** * 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(); }