Laravelでブログサイトを作る 09. ルーティング

はじめに
ルーティングは、どのURLでアクセスされた時に、どのコントローラの、どのメソッドを呼ぶかを指定します。
URL設計で挙げたURLを、routes/web.phpに記述していくことで設定します。
不要なものを削除(コメントアウト)
routes/web.phpには、動作確認の際に見たwelcomページと、認証機能を導入した際に追加されたdashboardページについての記述が存在しているはずです。
これらは、今後使用する予定が無いので、コメントアウトしてしまいます。
/*
Route::get('/', function () {
return view('welcome');
});
Route::middleware(['auth:sanctum', 'verified'])->get('/dashboard', function () {
return view('dashboard');
})->name('dashboard');
*/
管理ページ
管理側はログインしていることがアクセス条件となります。
※認証機能についてはコチラで解説しています。'middleware' => 'auth'の記述を加えることで、簡単に実現できます。
また、Route::groupで、admin以下のアクセスについての設定をまとめることができます。
管理側のページ1件ずつに上記の記述を書くのは面倒なので、こうしてまとめれば簡単で、かつ「このグループは管理用」というのが分かりやすいです。
// 管理画面(認証後に触れるページ)
Route::group(
[
'prefix' => 'admin',
'middleware' => 'auth',
'namespace' => 'App\\Http\\Controllers\\'
],
function() {
// 親カテゴリ管理:一覧(入力欄込)表示
Route::get('parent', 'ParentCategoryController@list')->name('admin_parent');
// 親カテゴリ管理:更新処理
Route::post('parentUpdate', 'ParentCategoryController@update')->name('admin_parent_update');
// 子カテゴリ管理:一覧(入力欄込)表示
Route::get('child', 'ChildCategoryController@list')->name('admin_child');
// 子カテゴリ管理:更新処理
Route::post('childUpdate', 'ChildCategoryController@update')->name('admin_child_update');
// 記事:入力フォーム
Route::get('articleEdit/{id?}', 'ArticleController@edit')->name('admin_article_edit');
// 記事:更新処理
Route::post('articleUpdate', 'ArticleController@update')->name('admin_article_update');
// 画像アップロード
Route::post('articleImageUpload', 'ArticleController@image')->name('admin_article_image_upload');
// 記事一覧
Route::get('articleList', 'ArticleController@adminList')->name('admin_article_list');
// 記事一覧(親カテゴリ絞り)
Route::get('articleList/parent/{parent}', 'ArticleController@adminParentList')->name('admin_article_list_parent');
// 記事一覧(子カテゴリ絞り)
Route::get('articleList/child/{child}', 'ArticleController@adminChildList')->name('admin_article_list_child');
// 記事一覧(検索)
Route::post('articleList/search/', 'ArticleController@adminSearchList')->name('admin_article_list_search');
// 記事プレビュー
Route::post('articlePreview', 'ArticleController@preview')->name('admin_article_preview');
// 「/admin/」にアクセスされたら、記事一覧へ
Route::get('/', 'ArticleController@adminList')->name('admin_top');
});
小ネタ
prefixの値を変更することで、管理画面のURLを外部から推測されづらいようにします。
たとえは、'prefix' => 'qawsedrftgyhujikolp',としておくと、管理画面のURLは「https://ドメイン/qawsedrftgyhujikolp/」となるので、URLを直接指定されるようなアクセスを防ぐことができます。
フロントページ
それぞれに->name('XXXXX')を付けることで、後から利用しやすくします。
詳しくはbladeテンプレートを作成する際に記載しますが、href="{{ route('XXXXX') }"のように記述することで、URLを生成してくれるのです。
例えば、「親カテゴリ一覧のURLを/p/{id}にしよう」となった時、routes/web.phpを修正し、nameの方はそのままにしておけば、出現箇所すべてを修正する必要はなくなるのです。
// フロントページ
Route::group(['prefix' => '/', 'namespace' => 'App\\Http\\Controllers\\'], function() {
// 一覧(http://ドメイン/)
Route::get('/', 'ArticleController@list')->name('top');
// 記事1件表示(http://ドメイン/content/XX)
Route::get('content/{id}', 'ArticleController@content')->name('content');
// 親カテゴリ別記事一覧(http://ドメイン/parent/XX/)
Route::get('parent/{id}', 'ArticleController@parentL')->name('list_parent');
// 子カテゴリ別記事一覧(http://ドメイン/child/XX/)
Route::get('child/{id}', 'ArticleController@childList')->name('list_child');
// 検索結果一覧(http://ドメイン/search/)
Route::post('search/', 'ArticleController@searchList')->name('list_search');
});
2022-04-23 09:00:00
