* * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Symfony\Bundle\FrameworkBundle\Routing; use Symfony\Component\Routing\Loader\AttributeClassLoader; use Symfony\Component\Routing\Route; /** * AttributeRouteControllerLoader is an implementation of AttributeClassLoader * that sets the '_controller' default based on the class and method names. * * @author Fabien Potencier * @author Alexandre Daubois */ class AttributeRouteControllerLoader extends AttributeClassLoader { /** * Configures the _controller default parameter of a given Route instance. */ protected function configureRoute(Route $route, \ReflectionClass $class, \ReflectionMethod $method, object $annot): void { if ('__invoke' === $method->getName()) { $route->setDefault('_controller', $class->getName()); } else { $route->setDefault('_controller', $class->getName().'::'.$method->getName()); } } /** * Makes the default route name more sane by removing common keywords. */ protected function getDefaultRouteName(\ReflectionClass $class, \ReflectionMethod $method): string { $name = preg_replace('/(bundle|controller)_/', '_', parent::getDefaultRouteName($class, $method)); if (str_ends_with($method->name, 'Action') || str_ends_with($method->name, '_action')) { $name = preg_replace('/action(_\d+)?$/', '\\1', $name); } return str_replace('__', '_', $name); } }