protected function execute(InputInterface $input, OutputInterface $output) { $methodSearch = implode('|', $input->getOption('method')); $controllerSearch = implode('|', $input->getOption('controller')); $nameSearch = implode('|', $input->getOption('name')); $this->loadRoutes(); $router = RouterManager::getInstance(); $result = []; // Tous les types de routes GET, POST, ... foreach ($router->routes as $type => $routes) { // Toutes les routes du type foreach ($routes as $route) { $id = $route->getObjectId(); // URL $path = $route->url; if (empty($path)) { $path = '/'; } // Contrôleur et méthode $controller = ''; $action = $route->callable; if (is_string($action)) { $action = explode('@', $action, 2); if (count($action) == 2) { $controller = $action[0]; $action = $action[1]; } } else { $action = 'function'; } // Nom de la route $name = $route->name; if (preg_match("#{$methodSearch}#i", $type) && preg_match("#{$controllerSearch}#i", $controller) && preg_match("#{$nameSearch}#i", $name)) { $result[$id] = []; $result[$id][] = $type; $result[$id][] = $path; $result[$id][] = $name; $result[$id][] = $controller; $result[$id][] = $action; } } } if (empty($result)) { $result = [['METHOD EMPTY', 'URL EMPTY', 'NAME EMPTY', 'CONTROLLER EMPTY', 'ACTION EMPTY']]; } ksort($result); $output->writeln(''); $table = new Table($output); $table->setHeaders(['METHOD', 'URL', 'NAME', 'CONTROLLER', 'ACTION']); $table->setRows($result); $table->render(); }
/** * Permet de tester les méthodes statiques pour le router */ public function testRouterFactory() { Router::get('/', 'HomeController@index')->setName('index'); Router::post('/', 'HomeController@insert')->setName('insert'); Router::put('/{id:[0-9]+}', 'HomeController@update')->setName('update'); Router::delete('/{id:[0-9]+}', 'HomeController@remove')->setName('remove'); Router::group('/news', function () { Router::match(['get', 'post', 'patch', 'delete'], '/', 'NewsController@rest'); }); Router::any('/admin/news', 'AdminController@newsRest'); $this->assertCount(5, RouterManager::getInstance()->routes); $this->assertCount(3, RouterManager::getInstance()->routes['GET']); $this->assertCount(3, RouterManager::getInstance()->routes['POST']); $this->assertCount(2, RouterManager::getInstance()->routes['PUT']); $this->assertCount(2, RouterManager::getInstance()->routes['PATCH']); $this->assertCount(3, RouterManager::getInstance()->routes['DELETE']); $this->assertTrue(Router::parse('/', 'get', false)); $this->assertTrue(Router::parse('/1', 'put', false)); $this->assertFalse(Router::parse('/users', 'get', false)); }
/** * On vérifie que l'on match bien les bonne routes * et que l'on récupère bien la bonne url */ public function testParseAndGet() { $router = RouterManager::getInstance(); $router->get('/news', 'NewsController@index'); $router->post('/news', 'NewsController@insert'); $router->get('/news/{id:[0-9]+}', 'NewsController@details'); $this->assertTrue($router->parse('/news', 'get', false)); $this->assertTrue($router->parse('/news', 'post', false)); $this->assertTrue($router->parse('/news/1', 'get', false)); $this->assertInstanceOf(Route::class, $router->parse('/news', 'get')); $this->assertFalse($router->parse('/news', 'put')); $this->assertFalse($router->parse('/news/a', 'get')); $this->assertFalse($router->parse('/news/1', 'post')); $this->assertFalse($router->parse('/news/1', 'ajax')); $this->assertEquals('news', $router->url('NewsController.index')); $this->assertEquals('news', $router->url('NewsController.insert')); $this->assertEquals('news/2', $router->url('NewsController.details', ['id' => 2])); $this->assertNull($router->url('NewsController.detailsInconnue', ['id' => 'a'])); }
/** * Permet de générer l'url en fonction du nom et des paramètres * * @param string $name Le nom de la route * @param array $parameters Les paramètres si besoin * @return string|null L'url avec les paramètres */ public static function url($name, array $parameters = []) { return RouterManager::getInstance()->url($name, $parameters); }