我在Symfony组件之上编写自己的PHP框架作为学习练习。我按照http://symfony.com/doc/current/create_framework/index.html上的教程创建了我的框架。
我现在想要使用注释将我的路线连接到我的控制器。我目前有以下代码来设置路由:
// Create the route collection
$routes = new RouteCollection();
$routes->add('home', new Route('/{slug}', [
'slug' => '',
'_controller' => 'Controllers\HomeController::index',
]));
// Create a context using the current request
$context = new RequestContext();
$context->fromRequest($request);
// Create the url matcher
$matcher = new UrlMatcher($routes, $context);
// Try to get a matching route for the request
$request->attributes->add($matcher->match($request->getPathInfo()));
我遇到了以下类来加载注释,但我不确定如何使用它:
如果有人可以提供帮助,我会很感激。
由于
答案 0 :(得分:5)
我终于设法让这个工作了。首先,我将autoload.php文件包含在以下位置:
use Doctrine\Common\Annotations\AnnotationRegistry;
$loader = require __DIR__ . '/../vendor/autoload.php';
AnnotationRegistry::registerLoader([$loader, 'loadClass']);
然后我将路径收集位(在问题中)更改为:
$reader = new AnnotationReader();
$locator = new FileLocator();
$annotationLoader = new AnnotatedRouteControllerLoader($reader);
$loader = new AnnotationDirectoryLoader($locator, $annotationLoader);
$routes = $loader->load(__DIR__ . '/../Controllers'); // Path to the app's controllers
这里是AnnotatedRouteControllerLoader的代码:
class AnnotatedRouteControllerLoader extends AnnotationClassLoader {
protected function configureRoute(Route $route, ReflectionClass $class, ReflectionMethod $method, $annot) {
$route->setDefault('_controller', $class->getName() . '::' . $method->getName());
}
}
这取自https://github.com/sensiolabs/SensioFrameworkExtraBundle/blob/master/Routing/AnnotatedRouteControllerLoader.php。您可能希望对其进行修改以支持其他注释。
我希望这会有所帮助。