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の頭を「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'
]);
});
上記の設定で
/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 を使っています。気づいたことや新しい発見など情報を発信していきます。問い合わせはこちら。