ルーティング
ルーティング
特定のアドレスにアクセスしたとき、どの処理を呼び出して実行するか。
それを管理するのが「ルーティング」です。
「app」フォルダ
Laravelに用意されているフォルダの中で、最も重要で利用頻度が高い。
「app」フォルダは、Laravelアプリケーションの「アプリケーション」部分のプログラムが配置される。「app」フォルダを開いてみると、いくものファルダがある。
図「app」ファルダ
■Console
コンソールプログラムを配置
■Exceptions
例外に関する処理を配置
■Http
Webアプリケーションにアクセスしたときの処理をまとめておくところ。
アプリケーションの基本的なプログラムはここに作成。
■Providers
プロバイダと呼ばれるプログラムを配置
■User.php
ユーザー認証に関するスクリプト。使うことはない。
最も重要なのは、「Http」というフォルダ。
この中に、アプリケーションの基本的なプログラムとなるものが作成される。
それ以外は、「必要に応じて利用」といった感じ。
ルーティングと「routes」フォルダ
一般的なWebサイトは、Webサーバーの公開ファルダの中にファイルを用意しておくと、ファイルにアクセス可。
(例)
「Webapp」というフォルダに「sample.html」を用意。
http://〇〇/webapp/sample.htmlにアクセスすると自動的にファイルが読まれ、表示。
Laravelは特定のアドレスにアクセスすると、そのアドレスに割り付けられたプログラムが実行。それによって必要な処理や画面表示が作られる。
「〇〇というアドレスにアクセスをしたら、✕✕という処理を呼び出す」という関連付けを行っているのが
「ルーティング」という機能。
ルーティングは、アクセスを設定している情報を管理する機能。
特定のアドレスにアクセスすると、それに対応する処理が呼び出される。その関連付けを行っているのが「ルーティング」
「routes」フォルダ
ルーティングに関する情報をまとめているのが、「routes」フォルダ。
この中には、デフォルトでいくつかのスクリプトファイルが用意されている。
APIのルーティング。ユーザー認証などで、プログラム内から利用するAPIの機能を特定のアドレスに割り当てるのに利用。
■channels.php
ブロードキャストチャンネルのためのルーティング
■console.php
コンソールプログラムのためのルーティング
■web.php
一般的なWebページとしてアクセスするためのルーティング
基本的に、Webページとして公開するものは全てWeb.phpにルート情報を記述する、
と考える。それ以外のファイルは基本使用しない。
ルート情報の記述
<?php
Route::get('/', function () {
return view('welcome');
});
■ルート情報の基本(GETアクセス)
Route::get(アドレス,関数など);
GETアクセスのルート情報は、Routeクラスの「get」という静的メソッドを使って設定。
第一引数に割り当てるアドレス、第二引数にはアドレスによって呼び出される処理を用意。
第二引数は関数を指定することもあるし、「コントローラ」と呼ばれるものを指定することもある。
getメソッドでアドレスと処理を割り当てる。
トップページのルート情報
デフォルトで用意されているトップページのルート情報。
第一引数に「'/'」というトップページを示すアドレス。
第二引数に関数を指定。
Route::get('/', function () {
関数は以下のようになっている。
function(){
return 値;
}
引数なしのクロージャ(無名関数)。returnで戻り値を指定。returnで返される値が、そのアドレスにアクセスした際に表示される。
ここでは、「view」という関数を使って戻り値を用意。
view(テンプレート名)
このviewは、指定したテンプレートファイルをロードし、レンダリングして返す。
viewで引数にテンプレート指定すると、レンダリングされて返され、プラウザに表示。
welcomeテンプレートについて
returnで返しているのは、view('welcome')という関数の戻り値。
これで、welcome.blade.phpというテンプレートファイルをレンダリングして表示。
welcome.blade.phpというテンプレートファイルは
「resources」フォルダ内の「views」フォルダの中に用意されている。
welcome.blade.php
「routes」フォルダ内のWeb.phpをテキストエディタで開き編集。
一般的なWebページへのアクセスは、この中にルート情報を記述。
以下を追記
ここでは、Route::getの第2引数に以下のような関数を用意
ヒアドキュメントというのは、PHPで長文テキストを記述するのにつかわれる。
<<<演算子を使い、リスト内に記述されたテキストをまとめて変数などに代入できます。
長い文字列を変数に代入する場合は以下のような書式で記述
※ 終了の文字列には大文字のアルファベットを使う。よく見かけるのは「EOM」「EOF」「EOD」ですが、「ABC」でも何でも構わない。
ちなみに「EOM」は End Of Message、「EOF」は End Of File、「EOD」は End Of Document の略。
先ほどのRoute::get文を削除し、以下のリストを追記
/helloにアクセス
ヒアドキュメントなどを利用してHTMLのソースコードを用意して入れば、Route::getだけである程度作り込んだWebページを表示させることができる。
今回はこういうことができることであり、本格的には別の方法が用意される。
Route::getの働きとして、「HTMLコードをreturnする関数を用意すればWebページが表示される」という仕組み。
ルートパラメータの利用
Route::getでは、アクセスする際にパラメータを設定し、値を渡すことができる。
Route::get('/〇〇/{パラメータ}',function($受け取る引数){....});
第1引数のアドレス部分に、{パラメータ}という形でバラメータを用意。
第2引数の関数では、パラメータの値を受け取る変数を引数として用意。
パラメータ名と同じ名前である必要なし。
{パラメータ}で指定したパラメータの値は、そのまま関数の引数に渡される。
パラメータは複数用意可能。関数の引数を複数用意することで、これらの値を受け取る。
パラメータを利用する
実際にルートパラメータを利用。先程追加したリスト部分を以下のように編集。
今回は、ヒアドキュメント内に変数を埋め込んで利用するため、
Route::getの第2引数に用意するクロージャ(無名関数)内にヒアドキュメントを移動。
修正完了後、/hello/のアドレスの後にテキストを追記してアクセス。
http://127.0.0.1:10080/hello/sample
とアクセスすると、「sample」の部分がパラメータとして取り出され、Webページにメッセージとして表示される。
Route::getのパラメータについて
ここでは、Route::getメソッドの引数を以下のようにしている。
第1引数 'hello/{msg}'
第2引数 function($msg){....}
第1引数では、hello/の後に{msg}というパラメータを用意。
第2引数では、クロージャの引数に$msgというパラメータを用意。
これに、{msg}の値が$msg引数に渡される。
複数のパラメータになっても同じ。
(例)
Route::get('hello/{id}/{pass}',function ($id,$pass){....省略....});
上記のようならば、$idと$passという2つのパラメータ引数を利用できる。
必須パラメータと任意パラメータ
今までのパラメータは、基本的に「必須パラメータであり、パラメータを指定せずにアクセスするとエラーになる。
しかし、パラメータを付けなくてもアクセスできる。
それには、「任意パラメータ」を使う。
任意パラメータは「任意に付けて利用できるパラメータ」。
これは、パラメータ名の末尾に「?」を付けて宣言。第2引数の関数では、値が渡される仮引数にデフォルト値にを指定し、引数が渡されなくとも処理できるようにしておく。
先程の記述したRoute::getの行を以下のように編集
これで、msgパラメータは任意パラメータとなる。
パラメータを付けずにアクセス。メッセージとして「no message」と表示。