前回の記事で認証機能を作成まで解説しました。
ここからWEBアプリに必要な画面や機能をどんどん作っていくことになります。
前回作成した認証機能でログインすると、以下の画面が表示されます。
ログイン画面からHome画面に遷移しています。
では、このアクセスはどのように制御されているのでしょうか?
Laravelでは、ブラウザからのURLアクセスに対してのルーティングを設定するファイルがあります。
今回はこのルーティングの基本とよく使われるルーティングについて、解説します。
【ルーティングファイル】
Laravelで通常のブラウザからのHTTPリクエストに対するルーティング設定を行う場合は、 laravel/routes/web.php
で行います。
まずはこのファイルの中身を見てみましょう。
[web.php]
Route::get('/', function () { return view('welcome'); });
デフォルトでは、上記一つのルーティングのみが設定されています。
このルーティングは、Laravelのウェルカムページ(インストール後に最初に表示されるページ)のルーティングになります。
Route::get( 第1引数 , 第2引数 );
上記のルーティングはルーティングの基本となるGETアクセスと呼ばれるものです。
Routeクラスのgetメソッドを使用して設定します。
第1引数にはURIを、第2引数にはそれによって呼び出される処理を記載します。
ウェルカムページのルーティングでは、第1引数はトップページを示す'/'、第2引数はクロージャ(無名関数)になっており
view関数を使って戻り値にwelcomeテンプレートを設定しています。
このルーティングによって、トップページにウェルカムページを表示する制御を行っています。
テンプレートについては今後の記事で詳しく解説します。
【ルート定義メソッド】
HTTPリクエストに対して使用可能なルート定義メソッドは以下となります。
Route::get($uri, $callback); Route::post($uri, $callback); Route::put($uri, $callback); Route::patch($uri, $callback); Route::delete($uri, $callback); Route::options($uri, $callback);
主に使うのは上の二つです。
Route::get($uri, $callback);
GETリクエストに対してのルーティングを定義します。
主に通常のURL遷移やフォームのGETリクエストに対して用います。
Route::post($uri, $callback);
POSTリクエストに対してのルーティングを定義します。
主にフォームのPOSTリクエストに対して用います。
なお、post() put() delete()メソッドを用いる際は、送信元からCSRFトークンフィールドを渡す必要があります。
【コントローラへのルーティング】
ブラウザからどのURLにアクセスした時に、どのコントローラへ処理を渡すかを設定します。
コントローラへのルーティングは、以下のように記述します。
Route::get('test', 'TestController@index');
この場合は、ブラウザから http://localhost/testにアクセスすると、TestControllerのindex()メソッドへ処理を渡すという事になります。
【ルートパラメータ】
①必須パラメータ
URLからコントローラ側へパラメータを渡したい時は以下のように記述します。
Route::get('test/{user_id}', 'TestController@index');
上記のように {user_id} と記述すると、コントローラ側で変数 $user_id としてパラメータを取得する事が出来ます。
コントローラ側では以下のようにして取得します。
[TestController.php]
<?php namespace App\Http\Controllers; use Illuminate\Http\Request; class TestController extends Controller { public function index($user_id) { print_r($user_id); } }
パラメータは複数同時に渡すことも可能です。
Route::get('test/{user_id}/{user_name}/{email}', 'TestController@index');
<?php namespace App\Http\Controllers; use Illuminate\Http\Request; class TestController extends Controller { public function index($user_id, $user_name, $email) { $params = [ 'user_id' => $user_id, 'user_name' => $user_name, 'email' => $email, ]; print_r($params); } }
②任意パラメータ
パラメータの入力を任意のものとしたい(パラメータが無くても許容する)場合は以下のように記述します。
Route::get('test/{user_name?}', 'TestController@index');
{user_name?} と末尾にクエスチョンマーク「?」を付ける事で、パラメータが無くても許容されます。
もちろん、この場合はコントローラ側でデフォルト時の処理も忘れずに記述しましょう。
<?php namespace App\Http\Controllers; use Illuminate\Http\Request; class TestController extends Controller { public function index($user_name = 'John') { print_r($user_name); } }
【ビューへのルーティング】
コントローラではなくビューへ直接ルーティングを行いたい場合は、view()メソッドで設定します。
Route::view('/welcome', 'welcome');
第1引数にはURIを、第2引数には呼び出すビューの名称を設定します。
ビューへデータを渡したい場合は、第3引数に配列の形で渡します。
Route::view('/welcome', 'welcome', ['name' => 'John']);
ルーティングの基礎的な部分の解説は以上となります。
WEBアプリに処理を追加していくうえでの根幹にかかわる部分なので、しっかり理解して使いこなしていきましょう。