From 2ca00b6533b876b858685121baab98e6d122ae68 Mon Sep 17 00:00:00 2001 From: Sander Muller Date: Tue, 14 Jan 2025 20:31:08 +0100 Subject: [PATCH 1/4] Reimplement #54134 --- .../Foundation/Console/RouteListCommand.php | 5 +-- src/Illuminate/Routing/Router.php | 39 ++++++++++++++++++- 2 files changed, 38 insertions(+), 6 deletions(-) diff --git a/src/Illuminate/Foundation/Console/RouteListCommand.php b/src/Illuminate/Foundation/Console/RouteListCommand.php index 569469e3ce55..56bd4121f3fd 100644 --- a/src/Illuminate/Foundation/Console/RouteListCommand.php +++ b/src/Illuminate/Foundation/Console/RouteListCommand.php @@ -249,10 +249,7 @@ protected function isVendorRoute(Route $route) */ protected function isFrameworkController(Route $route) { - return in_array($route->getControllerClass(), [ - '\Illuminate\Routing\RedirectController', - '\Illuminate\Routing\ViewController', - ], true); + return $this->router->isFrameworkController((string) $route->getControllerClass()); } /** diff --git a/src/Illuminate/Routing/Router.php b/src/Illuminate/Routing/Router.php index 3665d910aa34..3de9a3923840 100644 --- a/src/Illuminate/Routing/Router.php +++ b/src/Illuminate/Routing/Router.php @@ -135,6 +135,16 @@ class Router implements BindingRegistrar, RegistrarContract */ public static $verbs = ['GET', 'HEAD', 'POST', 'PUT', 'PATCH', 'DELETE', 'OPTIONS']; + /** + * The Framework built-in route controllers. + * + * @var list> + */ + protected $frameworkControllers = [ + RedirectController::class, + ViewController::class, + ]; + /** * Create a new Router instance. * @@ -258,7 +268,7 @@ public function fallback($action) */ public function redirect($uri, $destination, $status = 302) { - return $this->any($uri, '\Illuminate\Routing\RedirectController') + return $this->any($uri, RedirectController::class) ->defaults('destination', $destination) ->defaults('status', $status); } @@ -287,7 +297,7 @@ public function permanentRedirect($uri, $destination) */ public function view($uri, $view, $data = [], $status = 200, array $headers = []) { - return $this->match(['GET', 'HEAD'], $uri, '\Illuminate\Routing\ViewController') + return $this->match(['GET', 'HEAD'], $uri, ViewController::class) ->setDefaults([ 'view' => $view, 'data' => $data, @@ -627,6 +637,10 @@ protected function convertToControllerAction($action) */ protected function prependGroupNamespace($class) { + if ($this->isFrameworkController($class)) { + return '\\'.$class; + } + $group = end($this->groupStack); return isset($group['namespace']) && ! str_starts_with($class, '\\') && ! str_starts_with($class, $group['namespace']) @@ -1429,6 +1443,27 @@ public function setRoutes(RouteCollection $routes) $this->container->instance('routes', $this->routes); } + /** + * Determine if the route uses a framework controller. + * + * @param string $class + * @return bool + */ + public function isFrameworkController($class) + { + return in_array($class, $this->frameworkControllers, true); + } + + /** + * Get the controllers belonging to the framework + * + * @return class-string[] + */ + public function getFrameworkControllers() + { + return $this->frameworkControllers; + } + /** * Set the compiled route collection instance. * From 52e7a6ab88b0193b955f13591e34ec959a01d52c Mon Sep 17 00:00:00 2001 From: Sander Muller Date: Tue, 14 Jan 2025 20:37:29 +0100 Subject: [PATCH 2/4] Cleanup --- src/Illuminate/Routing/Router.php | 10 ---------- 1 file changed, 10 deletions(-) diff --git a/src/Illuminate/Routing/Router.php b/src/Illuminate/Routing/Router.php index 3de9a3923840..eb9e26de0689 100644 --- a/src/Illuminate/Routing/Router.php +++ b/src/Illuminate/Routing/Router.php @@ -1454,16 +1454,6 @@ public function isFrameworkController($class) return in_array($class, $this->frameworkControllers, true); } - /** - * Get the controllers belonging to the framework - * - * @return class-string[] - */ - public function getFrameworkControllers() - { - return $this->frameworkControllers; - } - /** * Set the compiled route collection instance. * From bfda3ca2a1a3b6c896574bf9fe907bfaa7dff9d0 Mon Sep 17 00:00:00 2001 From: Sander Muller Date: Tue, 14 Jan 2025 20:40:11 +0100 Subject: [PATCH 3/4] Inline frameworkControllers property --- src/Illuminate/Routing/Router.php | 15 ++++----------- 1 file changed, 4 insertions(+), 11 deletions(-) diff --git a/src/Illuminate/Routing/Router.php b/src/Illuminate/Routing/Router.php index eb9e26de0689..a69b32bc2b3f 100644 --- a/src/Illuminate/Routing/Router.php +++ b/src/Illuminate/Routing/Router.php @@ -135,16 +135,6 @@ class Router implements BindingRegistrar, RegistrarContract */ public static $verbs = ['GET', 'HEAD', 'POST', 'PUT', 'PATCH', 'DELETE', 'OPTIONS']; - /** - * The Framework built-in route controllers. - * - * @var list> - */ - protected $frameworkControllers = [ - RedirectController::class, - ViewController::class, - ]; - /** * Create a new Router instance. * @@ -1451,7 +1441,10 @@ public function setRoutes(RouteCollection $routes) */ public function isFrameworkController($class) { - return in_array($class, $this->frameworkControllers, true); + return in_array($class, [ + RedirectController::class, + ViewController::class, + ], true); } /** From 8f2b034b72461202073e0e3a9b2f116a74bf31d9 Mon Sep 17 00:00:00 2001 From: Sander Muller Date: Tue, 14 Jan 2025 20:41:38 +0100 Subject: [PATCH 4/4] Improve Docblock text --- src/Illuminate/Routing/Router.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Illuminate/Routing/Router.php b/src/Illuminate/Routing/Router.php index a69b32bc2b3f..edcfb889bb95 100644 --- a/src/Illuminate/Routing/Router.php +++ b/src/Illuminate/Routing/Router.php @@ -1434,7 +1434,7 @@ public function setRoutes(RouteCollection $routes) } /** - * Determine if the route uses a framework controller. + * Determine if the class is a framework controller. * * @param string $class * @return bool