diff --git a/README.md b/README.md
index b9ab254..0acd9cc 100644
--- a/README.md
+++ b/README.md
@@ -2,7 +2,7 @@
-
+
diff --git a/src/Command/Router/RouterDumpCommand.php b/src/Command/Router/RouterDumpCommand.php
index 282648a..6882666 100644
--- a/src/Command/Router/RouterDumpCommand.php
+++ b/src/Command/Router/RouterDumpCommand.php
@@ -103,31 +103,31 @@ protected function analyseRoute(Route $router, ?string $module = null): object
}
/**
- * @param string[] $defaults
+ * @param array $defaults
*/
protected function analyseDefaults(array $defaults): string
{
$primary = [];
if (isset($defaults['presenter'])) {
- $primary[] = $defaults['presenter'];
+ $primary[] = $this->stringifyDefault($defaults['presenter']);
unset($defaults['presenter']);
}
if (isset($defaults['action'])) {
- $primary[] = $defaults['action'];
+ $primary[] = $this->stringifyDefault($defaults['action']);
unset($defaults['action']);
}
if (isset($defaults['id'])) {
- $primary[] = $defaults['id'];
+ $primary[] = $this->stringifyDefault($defaults['id']);
unset($defaults['id']);
}
$secondary = [];
foreach ($defaults as $key => $value) {
- $secondary[] = sprintf('%s=>%s', $key, $value);
+ $secondary[] = sprintf('%s=>%s', $key, $this->stringifyDefault($value));
}
if ($secondary !== []) {
@@ -137,4 +137,17 @@ protected function analyseDefaults(array $defaults): string
return implode(':', $primary);
}
+ protected function stringifyDefault(mixed $value): string
+ {
+ if (is_string($value)) {
+ return $value;
+ }
+
+ if (is_scalar($value) || $value === null) {
+ return var_export($value, true);
+ }
+
+ return get_debug_type($value);
+ }
+
}
diff --git a/tests/Cases/Command/Router/RouterDumpCommand.phpt b/tests/Cases/Command/Router/RouterDumpCommand.phpt
new file mode 100644
index 0000000..19648b0
--- /dev/null
+++ b/tests/Cases/Command/Router/RouterDumpCommand.phpt
@@ -0,0 +1,58 @@
+addRoute('api//', [
+ 'presenter' => 'Api:Dashboard',
+ 'action' => 'default',
+ ]);
+
+ $admin = $router->withModule('Admin');
+ $admin->addRoute('admin//[/]', [
+ 'presenter' => 'Dashboard',
+ 'action' => 'default',
+ 'id' => 1,
+ 'lang' => 'cs',
+ 'secured' => true,
+ 'meta' => ['role' => 'admin'],
+ ]);
+
+ $application = new Application();
+ $application->addCommand(new RouterDumpCommand($router));
+
+ $command = $application->find('nette:router:dump');
+ $commandTester = new CommandTester($command);
+ $commandTester->execute([]);
+
+ $display = $commandTester->getDisplay();
+ $analyseDefaults = \Closure::bind(
+ fn (array $defaults): string => $this->analyseDefaults($defaults),
+ $command,
+ RouterDumpCommand::class,
+ );
+
+ Assert::true(str_contains($display, 'api//'));
+ Assert::true(str_contains($display, 'Api:Dashboard:default'));
+ Assert::true(str_contains($display, 'admin//[/]'));
+ Assert::true(str_contains($display, 'Admin'));
+ Assert::true(str_contains($display, 'Dashboard:default:1 [lang=>cs,secured=>1]'));
+ Assert::same('Dashboard:default:1 [lang=>cs,secured=>true,meta=>array]', $analyseDefaults([
+ 'presenter' => 'Dashboard',
+ 'action' => 'default',
+ 'id' => 1,
+ 'lang' => 'cs',
+ 'secured' => true,
+ 'meta' => ['role' => 'admin'],
+ ]));
+});