#Laravel ドキュメント学習 (基礎:ルーティング①)
###基本的なルーティング
Route::get('foo', function () {
return 'Hello World';
});
ドキュメントには、「一般的にはURIと「クロージャ」により定義され、単純で記述しやすいルートの定義方法を提供しています。」と書かれています。
そもそもクロージャとはなんぞやってことなので調べました。
「クロージャとは、プログラミング言語における関数オブジェクトの一種」
だそうです。よくわからなかったので、関数とオブジェクトと分けて考えることにしました。書いた事柄に関して情報吐き出してくれる物と解釈しました。(何となくわかりそうなものを説明しようとすると難しい...)
<自分なりの解釈>
ルーティングとは、URLでページを表示したい場合、色々な条件をつけて指定ができること。
ルーティングは「/routes/web.php」に記述する事。
###使用可能なルート定義メソッド
Route::get($uri, $callback);
Route::post($uri, $callback);
Route::put($uri, $callback);
Route::patch($uri, $callback);
Route::delete($uri, $callback);
Route::options($uri, $callback);
ドキュメントには、「ルータはHTTP動詞に対応してルートを定義できるようにしています。」と書かれています。
簡単に言うと、HTTP動詞(上記でいう、"get","post","put","patch","delete","options"のこと)の形に合わせて、処理手続きを決目ているという事です。
HTTP動詞ってなんだよってはじめ思っていたので、補足を書くと通信するときの決まりごとだと僕は理解しています。「こんにちは」って日本語で挨拶したのに「ドベル ダン」って返されたら??ってなりますよね。会話できるように言語を合わせようって事だと僕は思っています。ちなみに「ドベル ダン」ってスロベニア語らしいです。
それぞれのHTTP動詞の形の意味は、
GET・・・データの取得
POST・・・データの追加
PUT・・・データの更新
PATCH・・・データの更新(一部)
DELETE・・・データの削除
OPTIONS・・・使えるメソッド一覧を表示
詳しくは僕がわかりやすいなと思ったリンクを貼ります。
PUT か POST か PATCH か?
HTTP(GET・POST)について
###CSRF保護について
CSRFとは、クロス・サイト・リクエスト・フォージェリのことで、Webアプリケーションの脆弱性やそれを利用した攻撃のことを表し、成りすましによって悪意のある操作を行うことです。
Laravelでは、クロス・サイト・リクエスト・フォージェリを防ぐためにトークン(本人であるという証拠のようなもの)を自動的に生成し、認証済みのユーザーかを確かめています。
そのため、POST、PUT、DELETEルートへ送信されるHTMLフォームはすべて、CSRFトークンフィールドを含まなければいけません。
<form method="POST" action="/profile">
@csrf
...
</form>
<自分なりの解釈>
ルーティングの処理を書く際、POST、PUT、DELETEを使うときは@csrftを書く必要がある事。
Laravelが勝手にセキュリティー強化をしてくれてるんだな。
###正規表現制約とグローバル制約について
ドキュメントには、「指定した正規表現でいつもルートパラメータを制約したい場合は、patternメソッドを使ってください。」と書いてあります。
ルートパラメータとはidやnameなどURLに指定したい値が都度変わるときのルーティング書き方のことで、それを例えばidだったら数字以外は入らないから数字のみの制約をつけたり、nameであればa~zの文字しか入らないからa~zの文字のみの制約をつけたりすることです。
それらの制約を都度書くのは面倒なので、1回書けば他も自動的に制約をかけてくれる機能があり、それがpatternメゾットという事です。書き方は以下の通り。
Route::get('user/{id}/{name}', function ($id, $name) {
//
})->where(['id' => '[0-9]+', 'name' => '[a-z]+']);
/**
* ルートモデル結合、パターンフィルタなどの定義
*
* @return void
*/
public function boot()
{
Route::pattern('id', '[0-9]+');
parent::boot();
}
ちなみに正規表現とは、文字列を特定する際に、曖昧な感じで指定ができる表現方法のことで「これ!」ではなく「こんな感じ!」と指定できるもののことです。
例えば、麻婆豆腐が食べたい。じゃなくて辛いものが食べたいというみたいな感じだと思ってます。
<自分なりの解釈>
ルーティングを書くときに都度入る値が変わるときは、{id}のよう"{}"で指定する事
patternメゾットを使えば正規表現の指定が、1回で済むという事。
###感想
自分自身のため、プログラミング初心者にも伝わるように説明が記することを意識して書いたが、何となくやふわっとしか理解していなかったIT用語をわかるように書くのが難しかったが、自分自身とても学習になったのでよかったです。
ルーティングについて、ドキュメントを見て簡単にわかるところ以外は、全部まとめたかったが結構大変で分けることにしました。
次は、ドキュメントでいうルートグループあたりから書こうと思います。