Laravelのルーティングは、route\web.phpでとても楽にルーティングが出来るけど、いろいろ便利すぎてグルーピング、認証、namespace、prefix、nameとか混乱するのでメモ
マルチログイン環境の雛形を作るとこんなroutes\web.phpが出来上がる
↓参照
<?php
// ユーザー
Route::namespace('User')->prefix('user')->name('user.')->group(function () {
// ログイン認証関連
Auth::routes([
'register' => true,
'reset' => false,
'verify' => false
]);
// ログイン認証後
Route::middleware('auth:user')->group(function () {
// TOPページ
Route::resource('home', 'HomeController', ['only' => 'index']);
});
});
// 管理者
Route::namespace('Admin')->prefix('admin')->name('admin.')->group(function () {
// ログイン認証関連
Auth::routes([
'register' => true,
'reset' => false,
'verify' => false
]);
// ログイン認証後
Route::middleware('auth:admin')->group(function () {
// TOPページ
Route::resource('home', 'HomeController', ['only' => 'index']);
});
});
まずはこの部分
Route::namespace(‘User’)->prefix(‘user’)->name(‘user.’)->group(function () {
■namespace
コントローラーの場所について
Route::namespace(‘User‘)
Route::get(‘home’, ‘HomeController’);
と
namespaceなし
Route::get(‘home’, ‘User\HomeController’);
は同じ
■prefix
リクエストするURLについて
Route::prefix(‘user‘)
Route::get(‘home’, ‘HomeController’);
と
prefixなし
Route::get(‘user/home’, ‘HomeController’);
は同じ
■name
nameについて
Route::name(‘user.‘)
Route::get(‘home’, ‘HomeController’)->name(‘home’)
と
nameなし
Route::get(‘user/home’, ‘HomeController’)->name(‘user.home’)
は同じ
ルーティングは基本、複数行からなるがnamespace, prefix, nameを設定してadminとuserなどでグルーピングしておけば、何度も同じことを書かなくてよくなる仕組み
例えば、URLには’user’は含めずに、Userフォルダにあるコントローラーに渡したい場合もweb.phpで出来る
例)
prefixは書かない ‘/user’はURLに含めない
namespaceは’User’ コントローラーの場所は、Controller\User
Route::get(‘/’, ‘TopController@index’);
⇓
https://xxxxx/は、Controllers\User\TopControllerのindexメソッドに渡される。
■ログイン認証のいらないページ
ログインしなくても表示させたいページの場合
routes\web.php
・
・
・
// ログイン認証後 ※この外に記述する
Route::middleware(‘auth:user’)->group(function () {
// TOPページ
Route::resource(‘home’, ‘HomeController’, [‘only’ => ‘index’]);
});
// ログイン認証不要
Route::view(‘/logout’, ‘user.logout’)->name(‘user.logout’);
・
・
・