LoginSignup
3
3

More than 5 years have passed since last update.

Lumenで省かれたartisan route:listコマンドを追加する方法 改造編

Last updated at Posted at 2015-07-08

2015-08-30現在、この投稿の内容はappzcoder/lumen-route-listにマージされています。
コマンド拡張をされたい方は、composer update等でパッケージを新しいバージョンにアップデートしてください。

前回のつづき

今回の目的

こんな感じにする!

lumen_route_list_jpg.jpg

前回Lumenのartisanコマンドにroute:listコマンドを追加しましたが、本家Laravelに比べて若干表示が寂しい感じです。

表示される情報としては

  • リクエストメソッド
  • リクエストURI
  • 動作するアクション名

と、かなりシンプルなものでした。

ルートのみの確認用としては充分ですが、もう少し大きな規模のアプリケーションを作るには

  • NamedRoute(ルートの省略名?)
  • コントローラー名
  • routeMiddleWare

この辺りがあると、実際にファイルを覗かなくても構成周りが認識出来るんじゃないかと思いました。
なので今回はこのコマンドリストをもう少し充実させてみようと思います。

実装

改造に辺り扱うファイルはひとつだけです。
artisanコマンドを実行するとfireメソッドが実行される形になっています。
元のコードからちょっと変わっていますが、staticメソッドについては見やすく整理しただけです。

要点としては
- $routeCollectionからルート一覧を拾ってきて整形
- $headersに任意のヘッダー($rowsに入れる連想配列のキー数と合わせる)
の二点になります。

getRoutesメソッドで普通に連想配列として取得しているので、加工も簡単です。
もう少し工夫するともっと便利なコマンドになるかもしれませんね。

下に改造後のfireメソッド(長い)を添付しているので、参考にしてみてください。
よいLumenライフを!

実際のコード

app/Console/Commands/AppzcoderRouteCommand.php
    // 26行目付近
    public function fire()
    {
        global $app;
        $routeCollection = $app->getRoutes();

        $rows = array();
        foreach ($routeCollection as $route) {
            $rows[] = [
                'verb' => self::getMethod($route['method']),
                'Path' => self::getPath($route['uri']),
                'namedRoute' => self::getAs($route['action']),
                'Controller' => self::getController($route['action']),
                'Action' => self::getAction($route['action']),
                'Middleware' => self::getMiddleware($route['action']),
            ];
        }

        $headers = array( 'Verb', 'Path', 'namedRoute', 'Controller', 'Action', 'Middleware');
        $this->table($headers, $rows);
    }

    public static function getMethod($method)
    {
        return $method;
    }

    public static function getPath($uri)
    {
        return $uri;
    }

    public static function getAs(array $action)
    {
        return (!isset($action['as'])) ? "" : $action['as'];
    }

    public static function getController(array $action)
    {
        if(empty($action['uses'])) {
            return 'None';
        }
        return current(explode("@", $action['uses']));
    }

    public static function getAction(array $action)
    {
        if(empty($action['uses'])) {
            return 'Closure func';
        }
        if(($pos = strpos($action['uses'], "@")) !== FALSE) {
            return substr($action['uses'], $pos + 1);
        }
        return "";
    }

    public static function getMiddleware(array $action)
    {
        return (isset($action['middleware'])) ? (is_array($action['middleware'])) ? join(", ", $action['middleware']) :  $action['middleware'] : '';
    }
3
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
3