Skip to content

Commit dac2ea6

Browse files
vlastaveselydg
authored andcommitted
RoutingExtension: added support for custom single-route classes. (#162)
1 parent 6003337 commit dac2ea6

File tree

2 files changed

+35
-3
lines changed

2 files changed

+35
-3
lines changed

src/Bridges/ApplicationDI/RoutingExtension.php

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@ class RoutingExtension extends Nette\DI\CompilerExtension
2121
public $defaults = [
2222
'debugger' => NULL,
2323
'routes' => [], // of [mask => action]
24+
'routeClass' => NULL,
2425
'cache' => FALSE,
2526
];
2627

@@ -44,8 +45,9 @@ public function loadConfiguration()
4445
->setClass(Nette\Application\IRouter::class)
4546
->setFactory(Nette\Application\Routers\RouteList::class);
4647

48+
$routeClass = $config['routeClass'] ?: 'Nette\Application\Routers\Route';
4749
foreach ($config['routes'] as $mask => $action) {
48-
$router->addSetup('$service[] = new Nette\Application\Routers\Route(?, ?);', [$mask, $action]);
50+
$router->addSetup('$service[] = new ' . $routeClass . '(?, ?)', [$mask, $action]);
4951
}
5052

5153
if ($this->name === 'routing') {

tests/Bridges.DI/RoutingExtension.basic.phpt

Lines changed: 32 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,10 @@ use Tester\Assert;
1414
require __DIR__ . '/../bootstrap.php';
1515

1616

17+
class Route extends Nette\Application\Routers\Route
18+
{}
19+
20+
1721
test(function () {
1822
$loader = new DI\Config\Loader;
1923
$config = $loader->load(Tester\FileMock::create('
@@ -25,13 +29,39 @@ test(function () {
2529

2630
$compiler = new DI\Compiler;
2731
$compiler->addExtension('routing', new RoutingExtension(FALSE));
28-
$code = $compiler->addConfig($config)->compile();
32+
$code = $compiler->addConfig($config)->setClassName('Container1')->compile();
2933
eval($code);
3034

31-
$container = new Container;
35+
$container = new Container1;
3236
$router = $container->getService('router');
3337
Assert::type(Nette\Application\Routers\RouteList::class, $router);
3438
Assert::count(2, $router);
3539
Assert::same('index.php', $router[0]->getMask());
3640
Assert::same('item/<id>', $router[1]->getMask());
41+
42+
Assert::type(Nette\Application\Routers\RouteList::class, $router);
43+
Assert::type(Nette\Application\Routers\Route::class, $router[0]);
44+
});
45+
46+
47+
test(function () {
48+
$loader = new DI\Config\Loader;
49+
$config = $loader->load(Tester\FileMock::create('
50+
routing:
51+
routeClass:
52+
Route
53+
routes:
54+
item/<id>: Homepage:detail
55+
', 'neon'));
56+
57+
$compiler = new DI\Compiler;
58+
$compiler->addExtension('routing', new RoutingExtension(FALSE));
59+
$code = $compiler->addConfig($config)->setClassName('Container2')->compile();
60+
eval($code);
61+
62+
$container = new Container2;
63+
$router = $container->getService('router');
64+
65+
Assert::type(Nette\Application\Routers\RouteList::class, $router);
66+
Assert::type(Route::class, $router[0]);
3767
});

0 commit comments

Comments
 (0)