1: <?php
2: 3: 4: 5: 6: 7: 8: 9:
10:
11: namespace Autarky\Console;
12:
13: use Symfony\Component\Console\Input\InputInterface;
14: use Symfony\Component\Console\Output\OutputInterface;
15: use Symfony\Component\Console\Helper\Table;
16:
17: class RouteListCommand extends Command
18: {
19: 20: 21:
22: public function configure()
23: {
24: $this->setName('route:list')
25: ->setDescription('Show a list of routes')
26: ->setHelp(<<<'EOS'
27: Shows a list of all routes registered, their name, controller, path and hooks.
28: EOS
29: );
30: }
31:
32: /**
33: * {@inheritdoc}
34: */
35: protected function execute(InputInterface $input, OutputInterface $output)
36: {
37: $table = new Table($output);
38: $table->setHeaders(['Name', 'Methods', 'Path', 'Controller', 'Hooks']);
39:
40: $router = $this->app->getContainer()
41: ->resolve('Autarky\Routing\Router');
42:
43: /** @var \Autarky\Routing\Route $route */
44: foreach ($router->getRoutes() as $route) {
45: $methods = implode('|', $route->getMethods());
46: $controller = $route->getController();
47:
48: if (is_array($controller)) {
49: $controller = implode('::', $controller);
50: } else if ($controller instanceof \Closure) {
51: $controller = 'Closure';
52: }
53:
54: $hooks = '';
55: if ($before = $route->getBeforeHooks()) {
56: $hooks .= 'Before: ' . implode(', ', $before);
57: }
58: if ($after = $route->getAfterHooks()) {
59: if ($hooks !== '') {
60: $hooks .= ' - ';
61: }
62: $hooks .= 'After: ' . implode(', ', $after);
63: }
64:
65: $table->addRow([$route->getName(), $methods, $route->getPattern(), $controller, $hooks]);
66: }
67:
68: $table->render();
69:
70: return 0;
71: }
72: }
73: