vendor/bundles/Sensio/Bundle/FrameworkExtraBundle/Routing/AnnotatedRouteControllerLoader.php
changeset 0 7f95f8617b0b
--- /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);
+    }
+}