Skip to content

Instantly share code, notes, and snippets.

@agungsugiarto
Created August 5, 2021 04:08
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save agungsugiarto/1183b090daa34afb05394dc634c6978a to your computer and use it in GitHub Desktop.
Save agungsugiarto/1183b090daa34afb05394dc634c6978a to your computer and use it in GitHub Desktop.
CodeIgniter4 better route list
<?php
/**
* CodeIgniter
*
* An open source application development framework for PHP
*
* This content is released under the MIT License (MIT)
*
* Copyright (c) 2014-2019 British Columbia Institute of Technology
* Copyright (c) 2019-2020 CodeIgniter Foundation
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in
* all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
* THE SOFTWARE.
*
* @package CodeIgniter
* @author CodeIgniter Dev Team
* @copyright 2019-2020 CodeIgniter Foundation
* @license https://opensource.org/licenses/MIT MIT License
* @link https://codeigniter.com
* @since Version 4.0.0
* @filesource
*/
namespace App\Commands;
use CodeIgniter\CLI\BaseCommand;
use CodeIgniter\CLI\CLI;
use CodeIgniter\Config\Services;
/**
* Lists all of the user-defined routes. This will include any Routes files
* that can be discovered, but will NOT include any routes that are not defined
* in a routes file, but are instead discovered through auto-routing.
*
* @package CodeIgniter\Commands
*/
class Routes extends BaseCommand
{
/**
* {@inheritdoc}
*/
protected $group = 'CodeIgniter';
/**
* {@inheritdoc}
*/
protected $name = 'route:list';
/**
* {@inheritdoc}
*/
protected $description = 'Displays all of user-defined routes. Does NOT display auto-detected routes.';
/**
* {@inheritdoc}
*/
protected $usage = 'route:list';
/**
* {@inheritdoc}
*/
public function run(array $params)
{
$collection = Services::routes();
$methods = [
'get',
'head',
'post',
'patch',
'put',
'delete',
'options',
];
$tbody = [];
foreach ($methods as $method) {
$routes = $collection->getRoutes($method);
foreach ($routes as $route => $handler) {
$filters = $collection->getRoutesOptions($route, $method);
if (is_string($handler)) {
$tbody[] = [
strtoupper($method),
$route,
array_key_exists('as', $filters) ? $filters['as'] : '',
$handler,
array_key_exists('filter', $filters) ? $filters['filter'] : '',
];
}
}
}
usort($tbody, function($a, $b) {
return strcmp($a[3], $b[3]);
});
$thead = [
CLI::color('Method', 'green'),
CLI::color('URI', 'green'),
CLI::color('Name', 'green'),
CLI::color('Action', 'green'),
CLI::color('Filter', 'green'),
];
CLI::table($tbody, $thead);
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment