2015-08-30現在、この投稿の内容はappzcoder/lumen-route-listにマージされています。
コマンド拡張をされたい方は、composer update等でパッケージを新しいバージョンにアップデートしてください。
前回のつづき
今回の目的
こんな感じにする!
前回Lumenのartisanコマンドにroute:list
コマンドを追加しましたが、本家Laravelに比べて若干表示が寂しい感じです。
表示される情報としては
- リクエストメソッド
- リクエストURI
- 動作するアクション名
と、かなりシンプルなものでした。
ルートのみの確認用としては充分ですが、もう少し大きな規模のアプリケーションを作るには
- NamedRoute(ルートの省略名?)
- コントローラー名
- routeMiddleWare
この辺りがあると、実際にファイルを覗かなくても構成周りが認識出来るんじゃないかと思いました。
なので今回はこのコマンドリストをもう少し充実させてみようと思います。
実装
改造に辺り扱うファイルはひとつだけです。
artisanコマンドを実行するとfireメソッドが実行される形になっています。
元のコードからちょっと変わっていますが、staticメソッドについては見やすく整理しただけです。
要点としては
-
$routeCollection
からルート一覧を拾ってきて整形 -
$headers
に任意のヘッダー($rows
に入れる連想配列のキー数と合わせる)
の二点になります。
getRoutes
メソッドで普通に連想配列として取得しているので、加工も簡単です。
もう少し工夫するともっと便利なコマンドになるかもしれませんね。
下に改造後のfireメソッド(長い)を添付しているので、参考にしてみてください。
よいLumenライフを!
実際のコード
// 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'] : '';
}