ルーティングについて(応用編)

2018/10/12

以前、Laravelのルーティングについて基本的な記事をエントリーしました。

ルーティングについて

今回はもう少し細かい設定について勉強したので『応用編』として新たにエントリーします。

 

ルートに名前をつける

as キーは名札みたいなものです。

ドキュメントルート("/")に product.index という名前をつける場合は以下の通りです。

(※usesキーでProductControllerのgetIndexメソッドを実行)

Route::get('/', [
  'uses' => 'ProductController@getIndex',
  'as' => 'product.index'
]);

上記のようにルートに名前をつけたらroute関数を使用することで、URLを生成したり、リダイレクトしたりできます。

// ビューファイルでリンク先のURLを生成するケース
 <a href="{{ route('product.index') }}">Product infomation</a>

// コントローラでリダイレクトの処理をするケース
return redirect()->route('product.index');
【解説】
ルートに対して名前をつけるメリットは、URLの変更を簡単にできることです。

 

ルートグループ

ルーティングの設定で Route::group を使用すると一括して定義することができます。

ルートグループでよく使うのが

・プレフィックス(URLをまとめるときに使用)
・ミドルウェア(主に認証をかけるときに使用)

になります。

 

プレフィックス

URLの頭を「user」でまとめたいときに使います。

Route::group(['prefix' => 'user'], function() {

  Route::get('/signup',[
    'uses' => 'UserController@getSignup',
    'as' => 'user.signup'
  ]);

  Route::get('/signin',[
    'uses' => 'UserController@getSignin',
    'as' => 'user.signin'
  ]);

});
【解説】
上記の設定で以下のURLができます。
/user/signup
/user/signin

 

ミドルウェア

ミドルウェアをグループで指定する場合は middleware を配列のキーに指定します。

下の例では配列の値に auth を指定しました。

"/profile" 、 "/logout" ともにauthミドルウェアが使用されます。

Route::group(['middleware' => 'auth'], function(){

  Route::get('/profile',[
  'uses' => 'UserController@getProfile',
  'as' => 'user.profile'
  ]);

  Route::get('/logout',[
  'uses' => 'UserController@getLogout',
  'as' => 'user.logout'
  ]);

});

上記の設定で

/profile
/logout

この二つのURLに認証がかかります。

認証をかけていないページにおいて、すでに認証済みのユーザならスキップしてリダイレクトさせることも可能です。

middleware のキーに対して guest を指定します。

    Route::group(['middleware' => 'guest'], function(){
        
        /*
         * 登録
         */
        Route::get('/signup',[
            'uses' => 'UserController@getSignup',
            'as' => 'user.signup'
        ]);

        Route::post('/signup',[
             'uses' => 'UserController@postSignup',
             'as' => 'user.signup'
        ]);

        /*
         * ログイン
         */
        Route::get('/signin',[
              'uses' => 'UserController@getSignin',
              'as' => 'user.signin'
        ]);

        Route::post('/signin',[
              'uses' => 'UserController@postSignin',
              'as' => 'user.signin'
        ]);
     });
【解説】
ログインや登録画面にアクセスしたときにすでにログインしているなら、特定のページにリダイレクトされます。

 

ネストとして利用

Route::group はネストとして利用できます。

プレフィックス+認証ミドルウェアの両方を定義する場合は以下のようになります。

Route::group(['prefix' => 'user'], function() {

    Route::group(['middleware' => 'guest'], function(){

        Route::get('/signup',[
            'uses' => 'UserController@getSignup',
            'as' => 'user.signup'
        ]);

        Route::post('/signup',[
             'uses' => 'UserController@postSignup',
             'as' => 'user.signup'
        ]);

        Route::get('/signin',[
              'uses' => 'UserController@getSignin',
              'as' => 'user.signin'
        ]);

        Route::post('/signin',[
              'uses' => 'UserController@postSignin',
              'as' => 'user.signin'
        ]);
     });

    Route::group(['middleware' => 'auth'], function(){

        Route::get('/profile',[
            'uses' => 'UserController@getProfile',
            'as' => 'user.profile'
        ]);

        Route::get('/logout',[
            'uses' => 'UserController@getLogout',
            'as' => 'user.logout'
        ]);
    });

});

ルーティングについての詳しい設定方法については以上です。

本庄マサノリ

仕事で Laravel を使っています。気づいたことや新しい発見など情報を発信していきます。問い合わせはこちら

>> Twitter をフォローする

 

-実践知識