vendor/bundles/Sensio/Bundle/FrameworkExtraBundle/Routing/AnnotatedRouteControllerLoader.php
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/bundles/Sensio/Bundle/FrameworkExtraBundle/Routing/AnnotatedRouteControllerLoader.php Sat Sep 24 15:40:41 2011 +0200
@@ -0,0 +1,76 @@
+<?php
+
+namespace Sensio\Bundle\FrameworkExtraBundle\Routing;
+
+use Symfony\Component\Routing\Loader\AnnotationClassLoader;
+use Symfony\Component\Routing\Route;
+use Sensio\Bundle\FrameworkExtraBundle\Configuration\AnnotationReader as ConfigurationAnnotationReader;
+use Sensio\Bundle\FrameworkExtraBundle\Configuration\Method;
+
+/*
+ * This file is part of the Symfony framework.
+ *
+ * (c) Fabien Potencier <fabien@symfony.com>
+ *
+ * This source file is subject to the MIT license that is bundled
+ * with this source code in the file LICENSE.
+ */
+
+/**
+ * AnnotatedRouteControllerLoader is an implementation of AnnotationClassLoader
+ * that sets the '_controller' default based on the class and method names.
+ *
+ * It also parse the @Method annotation.
+ *
+ * @author Fabien Potencier <fabien@symfony.com>
+ */
+class AnnotatedRouteControllerLoader extends AnnotationClassLoader
+{
+ /**
+ * Configures the _controller default parameter and eventually the _method
+ * requirement of a given Route instance.
+ *
+ * @param Route $route A Route instance
+ * @param ReflectionClass $class A ReflectionClass instance
+ * @param ReflectionMethod $method A ReflectionClass method
+ */
+ protected function configureRoute(Route $route, \ReflectionClass $class, \ReflectionMethod $method, $annot)
+ {
+ // controller
+ $classAnnot = $this->reader->getClassAnnotation($class, $this->routeAnnotationClass);
+ if ($classAnnot && $service = $classAnnot->getService()) {
+ $route->setDefault('_controller', $service.':'.$method->getName());
+ } else {
+ $route->setDefault('_controller', $class->getName().'::'.$method->getName());
+ }
+
+ // requirements (@Method)
+ foreach ($this->reader->getMethodAnnotations($method) as $configuration) {
+ if ($configuration instanceof Method) {
+ $route->setRequirement('_method', implode('|', $configuration->getMethods()));
+ }
+ }
+ }
+
+ /**
+ * Makes the default route name more sane by removing common keywords.
+ *
+ * @param ReflectionClass $class A ReflectionClass instance
+ * @param ReflectionMethod $method A ReflectionMethod instance
+ * @return string
+ */
+ protected function getDefaultRouteName(\ReflectionClass $class, \ReflectionMethod $method)
+ {
+ $routeName = parent::getDefaultRouteName($class, $method);
+
+ return preg_replace(array(
+ '/(bundle|controller)_/',
+ '/action(_\d+)?$/',
+ '/__/'
+ ), array(
+ '_',
+ '\\1',
+ '_'
+ ), $routeName);
+ }
+}