tiger9810 / Laravel-Chirper

0 stars 0 forks source link

Routingを設定してみよう! #4

Open tiger9810 opened 1 year ago

tiger9810 commented 1 year ago

Models, migrations, and controllersの作成

短いメッセージを投稿できるようにするためには、Models, migrations, and controllersを作成する必要があります。 Models(モデル)はデータベースのテーブルと対話するためのインターフェースを提供し、Migrations(マイグレーション)はデータベースのテーブルの作成や変更を管理し、Controllers(コントローラ)はアプリケーションへのリクエストの処理とレスポンスの返却を担当します。これらの要素は、アプリケーションのデータを構築および操作するための強力な基盤を形成します。 ターミナルで以下のコマンドを実行することでModels, migrations, and controllersを一気に作成できます。

./vendor/bin/sail artisan make:model -mrc Chirp

このコマンドは次の3つのファイルを作成します:

app/Models/Chirp.php - model database/migrations/_create_chirps_table.php - データベーステーブルを作成するためのマイグレーション。 app/Http/Controller/ChirpController.php - 受信リクエストを処理し、レスポンスを返すHTTPコントローラー。

Routingを設定する

routes/web.phpファイルを開いて、ルーティングを設定します。(参考)

resourceを使用したルーティング

Route::resource('chirps', ChirpController::class)
    ->only(['index', 'store'])
    ->middleware(['auth', 'verified']);

Controllerを設定する

ルーティングの設定で作成されたURLにアクセスした場合の処理を記述する。 GETメソッドで/chirpsにアクセスした場合、ChirpControllerクラスのindexメソッドが呼び出される処理をルーティングを設定したので、app/Http/Controllers/ChirpController.phpのindexメソッドに処理を追加します。(参考:Routingを設定してみよう!

 return response('Hello, World!');

これでhttp://localhost:8000/chirpsにアクセスするとHello World!が表示されるはずです。

参照元:Creating Chirps

tiger9810 commented 1 year ago

ルーティングを設定するとは

ルーティングを設定するとは、「アプリケーションが受け取ったリクエストを処理するための特定のアクション(処理)に関連付けること」です。 例

// /homeというURLにGETリクエストがあった場合、HomeControllerのindexメソッドを実行する
Route::get('/home', 'HomeController@index');

// /usersというURLにPOSTリクエストがあった場合、UserControllerのstoreメソッドを実行する
Route::post('/users', 'UserController@store');
tiger9810 commented 1 year ago

resourceを使用したルーティングについて Route::resourceメソッドを使用すると、指定したリソース名(この場合は'chirps')に対して、以下の7つのルートが自動的に生成されます:

index(リソースの一覧表示) create(新規リソース作成のフォーム表示) store(新規リソースの保存) show(特定のリソースの詳細表示) edit(特定のリソースの編集フォーム表示) update(特定のリソースの更新) destroy(特定のリソースの削除) これらのルートは、指定したコントローラ(この場合はChirpController)の対応するメソッドにマッピングされます。

例えば、以下のコード:

Route::resource('chirps', ChirpController::class);

は、以下のルート定義と等価です:

// チャープ(chirps)の一覧を表示するためのルーティング
// GETメソッドで/chirpsにアクセスした場合、ChirpControllerクラスのindexメソッドが呼び出されます。
// indexメソッドは、すべてのチャープの一覧を表示するための処理を行います。
Route::get('/chirps', [ChirpController::class, 'index']);

// 新しいチャープを作成するためのフォームを表示するためのルーティング
// GETメソッドで/chirps/createにアクセスした場合、ChirpControllerクラスのcreateメソッドが呼び出されます。
// createメソッドは、新しいチャープを作成するためのフォームを表示するための処理を行います。
Route::get('/chirps/create', [ChirpController::class, 'create']);

// 新しいチャープを保存するためのルーティング
// POSTメソッドで/chirpsにアクセスした場合、ChirpControllerクラスのstoreメソッドが呼び出されます。
// storeメソッドは、新しいチャープをデータベースに保存するための処理を行います。
Route::post('/chirps', [ChirpController::class, 'store']);

// 特定のチャープの詳細を表示するためのルーティング
// GETメソッドで/chirps/{chirp}にアクセスした場合、ChirpControllerクラスのshowメソッドが呼び出されます。
// showメソッドは、特定のチャープの詳細を表示するための処理を行います。
Route::get('/chirps/{chirp}', [ChirpController::class, 'show']);

// 特定のチャープを編集するためのフォームを表示するためのルーティング
// GETメソッドで/chirps/{chirp}/editにアクセスした場合、ChirpControllerクラスのeditメソッドが呼び出されます。
// editメソッドは、特定のチャープを編集するためのフォームを表示するための処理を行います。
Route::get('/chirps/{chirp}/edit', [ChirpController::class, 'edit']);

// 特定のチャープを更新するためのルーティング
// PUTメソッドで/chirps/{chirp}にアクセスした場合、ChirpControllerクラスのupdateメソッドが呼び出されます。
// updateメソッドは、特定のチャープを更新するための処理を行います。
Route::put('/chirps/{chirp}', [ChirpController::class, 'update']);

// 特定のチャープを削除するためのルーティング
// deleteメソッドで/chirps/{chirp}にアクセスした場合、ChirpControllerクラスのdestroyメソッドが呼び出されます。
// deleteメソッドは、特定のチャープを削除するための処理を行います。
Route::delete('/chirps/{chirp}', [ChirpController::class, 'destroy']);
tiger9810 commented 1 year ago

その他のルーティング処理

全てresourceを使用したルーティングと同様の処理

resourceを使用したルーティング

Route::resource('chirps', ChirpController::class)
    ->only(['index', 'store'])
    ->middleware(['auth', 'verified']);

基本的なルーティング

Route::get('/chirps', [ChirpController::class, 'index'])->middleware(['auth', 'verified']);
Route::post('/chirps', [ChirpController::class, 'store'])->middleware(['auth', 'verified']);

名前付きのルーティング

Route::get('/chirps', [ChirpController::class, 'index'])->name('chirps.index')->middleware(['auth', 'verified']);
Route::post('/chirps', [ChirpController::class, 'store'])->name('chirps.store')->middleware(['auth', 'verified']);

コントローラクラス名とメソッド名を@で結合したルーティング

Route::get('/chirps', 'ChirpController@index')->name('chirps.index')->middleware(['auth', 'verified']);
Route::post('/chirps', 'ChirpController@store')->name('chirps.store')->middleware(['auth', 'verified']);
tiger9810 commented 1 year ago

基本的なルーティングと名前付きルートの違い

違い:ビュー内でリンクを生成する場合に、URL パスを直接指定するかどうか

名前付きの場合->URL パスを直接指定する

// ルートの定義
Route::get('/chirps', [ChirpController::class, 'index'])->name('chirps.index');

// ビュー内でのリンク生成
<a href="{{ route('chirps.index') }}">Chirps</a>

名前付きルートを使用しない場合->URL パスを直接書く代わりにルート名を使用する

// ルートの定義
Route::get('/chirps', [ChirpController::class, 'index']);

// ビュー内でのリンク生成
<a href="/chirps">Chirps</a>

名前付きルートを使用しない場合、ルートの URL パスが変更された場合には、ビュー内のリンクも個別に修正する必要があります。名前付きルートを使用することで、ルート名を参照するだけでリンクを生成できるため、変更が容易になります。

tiger9810 commented 1 year ago

use Illuminate\Http\Response; はなんですか?

use Illuminate\Http\Response; は、Response クラスを使用するために必要な Illuminate\Http\Response のインポート文です。

Response クラスは、HTTP レスポンスを表すための Laravel のクラスです。コントローラーメソッド内で Response クラスを返すことで、カスタムの HTTP レスポンスを生成することができます。

なぜこのインポート文を追加するのかというと、コードの中で Response クラスを使うためです。Response クラスは Laravel の機能を拡張するために使用される一般的なクラスであり、レスポンスをより細かく制御したい場合に便利です。

例えば、上記のコードでは、index メソッドが呼び出された際に文字列 'Hello, World!' をレスポンスとして返しています。このとき、Response クラスを使ってレスポンスを生成しています。

ただし、Response クラスを使わずに return 'Hello, World!'; と直接文字列を返すことも可能です。Response クラスは必須ではありませんが、より柔軟なレスポンス処理を行いたい場合に使用されることがあります。