for testing and deploying your application
for finding and fixing issues
for empowering human code reviews
<?php
declare(strict_types = 1);
namespace inroutephp\inroute\Compiler\Doctrine;
use inroutephp\inroute\Compiler\RouteCollectionInterface;
use inroutephp\inroute\Compiler\RouteCollection;
use inroutephp\inroute\Runtime\Route as RouteObject;
use Doctrine\Common\Annotations\AnnotationReader;
final class RouteFactory
{
/**
* @var AnnotationReader
*/
private $reader;
public function __construct(AnnotationReader $reader = null)
$this->reader = $reader ?: new AnnotationReader;
}
public function createRoutesFrom(string $classname): RouteCollectionInterface
if (!class_exists($classname)) {
return new RouteCollection([]);
$classReflector = new \ReflectionClass($classname);
if (!$classReflector->isInstantiable()) {
$routes = [];
foreach ($classReflector->getMethods(\ReflectionMethod::IS_PUBLIC) as $methodReflector) {
if ($methodReflector->isConstructor()) {
continue;
$routes[] = new RouteObject(
$classReflector->getName(),
$methodReflector->getName(),
$this->reader->getMethodAnnotations($methodReflector)
);
return new RouteCollection($routes);