Laravel 5.4から可能になった新しいRouteの書き方



Laravel 5.4から可能になったRouteの書き方の紹介です。

2017年1月24日(現地時間)にLaravelフレームのバージョン5.4がリリースされ、
ブラウザテストツール Laravel Duskを始めとする機能追加や 既存機能の改良されました。

Webフレームワークで、切っても切れないの処理の1つがRoutingですが、
Laravel 5.4からRouteが今までより 少しスッキリと書くことが可能になりました。

Laravel 5.3でのRouteの書き方

下のスニペットはLaravel5.3で可能なRouteファイルの書き方です。

groupを使ってルーティングを'article'にまとめ、
namespace使って'App\Http\Controllers\Article'からコントローラーを参照するようにしています。

// before
Route::group(['prefix' => 'article', 'namespace' => 'article'],
  function () {
      #GET /article
      Route::get('/', 'ArticleController@index')
          ->name('index');
      #GET /article/{num}
      Route::get('/{id}', 'ArticleController@post')
          ->name('post')
          ->where('id', '[0-9]+');
      #POST /article/comment
      Route::post('/comment', 'ArticleController@comment')
          ->name('comment')
          ->middleware('auth');
  });

 

Laravel 5.4から可能になったRouteの書き方

続いてはバージョン5.4から可能になったRouteです。

// Laravel 5.4から可能になった書き方
Route::prefix('article')->namespace('Article')
  ->group(function () {
      # /article
      Route::name('index')
            ->get('/', 'ArticleController@index');
      # /article/{num}
      Route::name('post')
            ->get('/{id}', 'ArticleController@post')
            ->where('id', '[0-9]+');
      # /article/comment
      Route::name('/comment')
            ->middleware('auth')
            ->post('comment', 'ArticleController@comment');
  });


先程の5.3で書いたスニペットと同じ処理ですが、groupメソッドの書き方に自由度が増えました。

今まではgroupメソッド内の引数にprerixnamespace等パラメーターを配列で渡す必用がありましたが、
バージョン5.4からは独立したメソッドとして' prefix '、' namespace 'が渡せるようになりました。

// Laravel 5.4での書き方
Route::prefix('article')->namespace('Article')
    ->group(function () {
      // do something
  });

// Laravel 5.3での書き方 *Laravel 5.4でも動作します
Route::group( ['prefix' => 'article', 'namespace' => 'article'],
      function () {
        // do something
  });


また、getやpost等のHTTP処理の書き方にも自由度が増えました。

今まではRouteクラスから最初にHTTPヴァーヴを渡して処理を書く必要がありましたが、
5.4からはnameメソッドを最初に渡すことができます。

nameメソッドが最初に渡せることで、どのRouteがどんな役割を持っているかわかり易くなりますね。

# Laravel 5.4から可能な書き方
Route::name('post')
      ->get('/{id}', 'ArticleController@post')
      ->where('id', '[0-9]+');

# Laravel 5.3の書き方 *Laravel 5.4でも可能です
Route::get('/{id}', 'ArticleController@post')
      ->name('post')
      ->where('id', '[0-9]+');


Summary

以上がLaravel 5.4から可能になったRouteの書き方でした。

システムが大きくなってくると、groupメソッドのネストや
Routeファイルが数百行になることは珍しくないので 今まで以上にスッキリと書くことができます。

Laravelで新しいプロジェクトを始める人や、5.4にバージョンアップした人はゼヒ×2使ってみてください!

Laravel 5.4 Document : Routing

 

この記事のカテゴリ
プログラミング

この記事に付けられているタグ



その他の運営サービス

最新の記事