1: <?php
2: 3: 4: 5: 6: 7: 8: 9:
10:
11: namespace Autarky\Console;
12:
13: use Symfony\Component\Console\Input\InputArgument;
14: use Symfony\Component\Console\Input\InputInterface;
15: use Symfony\Component\Console\Output\OutputInterface;
16: use Symfony\Component\HttpFoundation\Request;
17:
18: 19: 20:
21: class RouteDispatchCommand extends Command
22: {
23: 24: 25:
26: public function configure()
27: {
28: $this->setName('route:dispatch')
29: ->setDescription('Given a URL, see what route is matched')
30: ->addArgument('method', InputArgument::REQUIRED, 'HTTP method')
31: ->addArgument('path', InputArgument::REQUIRED, 'URL path')
32: ->setHelp(<<<'EOS'
33: This command fakes an HTTP request and returns information about the route that was matched against the request. For example:
34:
35: php bin/console.php route:dispatch GET /foo/bar/baz
36:
37: This example will fake a HTTP GET request to the path /foo/bar/baz.
38: EOS
39: );
40: }
41:
42: /**
43: * {@inheritdoc}
44: */
45: protected function execute(InputInterface $input, OutputInterface $output)
46: {
47: /** @var \Autarky\Routing\Router $router */
48: $router = $this->app->getContainer()
49: ->resolve('Autarky\Routing\Router');
50:
51: $request = Request::create($input->getArgument('path'), $input->getArgument('method'));
52: $route = $router->getRouteForRequest($request);
53:
54: $controller = $route->getController();
55:
56: if (is_array($controller)) {
57: $controller = implode('::', $controller);
58: } else if ($controller instanceof \Closure) {
59: $controller = 'Closure';
60: }
61:
62: $output->writeln('<info>Route name:</info> '.$route->getName());
63: $output->writeln('<info>Route controller:</info> '.$controller);
64: $output->writeln('<info>Route path:</info> '.$route->getPattern());
65: $output->writeln('<info>HTTP methods:</info> '.implode('|', $route->getMethods()));
66:
67: if ($hooks = $route->getBeforeHooks()) {
68: $output->writeln('<info>Before hooks:</info> '.implode(', ', $hooks));
69: }
70: if ($hooks = $route->getAfterHooks()) {
71: $output->writeln('<info>After hooks:</info> '.implode(', ', $hooks));
72: }
73:
74: return 0;
75: }
76: }
77: