アジェンダ
- PHP[Laravel]の基本機能の一つ、ルーティングについて基礎理解を深める。
- ルーティングに用いられている基本的な関数についても理解を深める。
ルーティングとは
ある特定のアドレスにアクセスした際に、何のHTTPリクエストを要求されたら、どの処理を実行するかを管理・設定する仕組みです。
ルートディレクトリをアクセスし、GETリクエストを要求すれば単純にトップページを表示させたい場合や、投稿フォームページからPOSTリクエストをした場合は、入力情報をDBへ保存する処理を実行させたい、などと、Laravelで最も基本的な仕組みの一つとなります。
何が起きているのか
基本
Laravelを導入すると、デフォルトで設定されているルーティングがあります。
こちらから見てみます。
<?php
use Illuminate\Support\Facades\Route;
Route::get('/', function () {
return view('welcome');
});
Routeクラス
Laravelのルーティング機能は、ルートファイルに定義されたRouteクラスを記述する事で処理を定義していきます。
::(スコープ演算子)
静的メソッドやインスタンス化されていないクラスのプロパティを呼び出す演算子です。似たような演算子に、 ->(アロー演算子) があります。
HTTPメソッド
ここで設定されているget()メソッドは、Laravelで定義されているRouteクラスのHTTPメソッドの一つで、スコープ演算子によって呼び出されます。Laravelでよく使われるHTTPメソッドは以下があります。
- GET()
- POST()
- PUT()
($url, $hogehoge)
第1引数に特定のアドレスを指定し、第2引数に関数を指定します。デフォルトでは、第1引数は'/'
で、ルートディレクトリを指定しています。第2引数にはfunction(){return view('welcome')}
と 無名関数 を記述し、 view という関数で引数に指定した'welcome'テンプレートをレンダリングしブラウザに返しています。
無名関数とは
関数名を指定しない関数。クロージャーとも言う。通常の関数は、function hogehoge(引数)
のように関数名を指定するが、無名関数ではfunction(引数)
のように関数を指定しない。その場でしか使う必要が無い場合に用いる関数。
view関数とは
ビューを表示させる関数。引数にファイル名を指定することで、HTML,CSS,PHP,JSなどで構成された該当のbladeテンプレートファイルをレンダリングし、ブラウザに表示させる関数。
まとめると、デフォルトのルーティングは、ルートディレクトリにアクセスし、GETリクエストを要求した場合に、'welcome'というテンプレートファイルをレンダリング処理し、ブラウザに表示させる処理を実行するように設定されている事になります。
定石
デフォルトの例では、処理したい内容はview関数でwelcomeというテンプレートをreturnする事でした。
Laravelでルーティングを活用するために、特定のコントローラーのメソッドを呼び出して処理を実行したい場合に、HTTPメソッドの第2引数にコントローラーを指定する記述ができます。
Route::post('/post', 'App\Http\Controllers\PostController@store');
上記例は、/post
ディレクトリにアクセスしていて、POSTリクエストを要求すると、'App\Http\Controllers\PostController@store'
を呼び出して実行させるルーティングの設定になります。
デフォルトのルーティングと異なる点は以下。
- HTTPメソッドをget()からpost()
- 第1引数を'/'から'/post'
- 第2引数を「無名関数でview関数を実行」から「~~~PostController@store」
第2引数にコントローラーを指定することで、LaravelのMVCモデルに則った実装ができます。特定のURLにおいて、特定のHTTPメソッドを要求した場合に、特定のコントローラーのメソッドを呼び出すルーティングを行う事で、動的な処理を使い分けて実行できるようになります。
ここで言う第2引数の'App\Http\Controllers\PostController@store'
はあくまで例ですが、別途作成したPostController内にあるstoreメソッドを呼び出す記述となっています。
このstoreメソッドには、ユーザーがビューで入力した情報を、DBに保存する仕組みが記述されている前提だとします。
すると、ユーザーは/post
にアクセスし、何らかの投稿フォームが表示されていて、そこに情報を入力しPOSTリクエスト(ユーザー側からすると、送信ボタンを押す、など)
を行うと、上記のルーティングによって、PostControlleのstoreメソッドが実行され、ユーザーが入力した情報がDBに保存される流れになります。
そのような仕組みを、リクエストや条件で柔軟に実行する処理を分岐できます。またLaravelのMVCモデルに基づいた実装は非常に便利で、コントローラーを活用することでバリデーションチェックやDB操作を容易に実装できます。
これらの組み合わせで、複雑なWEBアプリ開発を実現することができます。
今回はここまで。
ご指摘事項等あれば、是非ご教授ください。励みになります。
お時間いただきありがとうございました。