Skip to content

Commit 58ee559

Browse files
authored
Merge pull request #2734 from samsonasik/ensure-fqcn-controllername
Fixes #2520 : ensure service(router)->controllername() returns fqcn
2 parents 809a451 + 813fbfe commit 58ee559

2 files changed

Lines changed: 40 additions & 2 deletions

File tree

system/Router/Router.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -579,7 +579,7 @@ public function autoRoute(string $uri)
579579
// We have to check for a length over 1, since by default it will be '\'
580580
if (strpos($this->controller, '\\') === false && strlen($this->collection->getDefaultNamespace()) > 1)
581581
{
582-
$this->controller = str_replace('/', '\\', $this->collection->getDefaultNamespace() . $this->directory . $this->controllerName());
582+
$this->controller = '\\' . ltrim(str_replace('/', '\\', $this->collection->getDefaultNamespace() . $this->directory . $this->controllerName()), '\\');
583583
}
584584
}
585585

tests/system/Router/RouteCollectionTest.php

Lines changed: 39 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -815,7 +815,6 @@ public function testReverseRoutingWithLocale()
815815
$routes->add('{locale}/contact', 'myController::goto');
816816

817817
$this->assertEquals('/en/contact', $routes->reverseRoute('myController::goto'));
818-
819818
}
820819

821820
//--------------------------------------------------------------------
@@ -1475,4 +1474,43 @@ public function testZeroAsURIPath()
14751474
$this->assertEquals($expects, $router->handle('/0'));
14761475
}
14771476

1477+
public function provideRouteDefaultNamespace()
1478+
{
1479+
return [
1480+
'with \\ prefix' => ['\App\Controllers'],
1481+
'without \\ prefix' => ['App\Controllers'],
1482+
];
1483+
}
1484+
1485+
/**
1486+
* @dataProvider provideRouteDefaultNamespace
1487+
*/
1488+
public function testAutoRoutesControllerNameReturnsFQCN($namespace)
1489+
{
1490+
$routes = $this->getCollector();
1491+
$routes->setAutoRoute(true);
1492+
$routes->setDefaultNamespace($namespace);
1493+
1494+
$router = new Router($routes, Services::request());
1495+
$router->handle('/product');
1496+
1497+
$this->assertEquals('\App\\Controllers\\Product', $router->controllerName());
1498+
}
1499+
1500+
/**
1501+
* @dataProvider provideRouteDefaultNamespace
1502+
*/
1503+
public function testRoutesControllerNameReturnsFQCN($namespace)
1504+
{
1505+
$routes = $this->getCollector();
1506+
$routes->setAutoRoute(false);
1507+
$routes->setDefaultNamespace($namespace);
1508+
$routes->get('/product', 'Product');
1509+
1510+
$router = new Router($routes, Services::request());
1511+
$router->handle('/product');
1512+
1513+
$this->assertEquals('\App\\Controllers\\Product', $router->controllerName());
1514+
}
1515+
14781516
}

0 commit comments

Comments
 (0)