前回のコントローラの続きです。
今回からコントローラでパラメータの取得方法について学んでいきたいと思います。
※前回の記事をまだお読みでない方は以下からお読みください。

パラメータの受け取り方にはルートパラメータ、リクエストパラメータの二つがありますが、長くなりそうなので、今回はルートパラメータの説明からしたいと思います。
Laravelのコントローラでルートパラメータを取得
ルートパラメータとはURLから情報を取得することを言います。
例えば、「http://127.0.0.1:8081/hello-world/taro/12」とアクセスしたら、URLから「taro」と「12」を取得することがLaravelでは簡単に実現できます。
ではルートパラメータを取得する方法について見ていきます。
ルート定義とクラス編集
ルート定義を以下のように修正します。
// コントローラのindexアクションへ、ルートパラメータを定義
Route::get('/hello-world/{name?}/{age?}', 'HelloWorldController@index');
次にHelloWorlControllerのindexアクションを以下のように修正してください。
<?php
//...
class HelloWorldController extends Controller
{
public function index(string $name = 'noname', int $age = 20)
{
return <<<EOF
<h1>Hello World</h1>
<p> name: {$name} </p>
<p> age: {$age} </p>
EOF;
}
}
たったこれだけです。
では先ほどのURL「http://127.0.0.1:8081/hello-world/taro/12」にアクセスしてみましょう。

上記のようにURLからパラメータ値を取得できましたと思います!
任意パラメータについて
またルート定義をよく見て下さい。
「name」と「age」の後ろに「?」がついてるのが気づきましたでしょうか?
「?」をつけることによって任意パラメータとして認識されます。
これをつけないと必須パラメータとなり、先ほどの例で言えば「/taro/12」がないと404エラー(ページ存在しないエラー)となってしまいます。
任意パラメータがないと…?
それではルートパラメータをつけない状態でアクセスしてみましょう。
※http://127.0.0.1:8081/hello-world/へアクセス

nameに「noname」、ageに「20」が表示されていることが分かりますでしょうか?
これはアクションの上記の通り、メソッドにデフォルト引数を渡しているため、任意パラメータが渡されていない場合、そちらの値が使われることになります。
さいごに
ご覧いただいたようにLaravelではパラメータの取得方法を簡潔に実装することができます。
実務でもルートパラメータは当たり前のように使われますので、ぜひ、使いこなせるようにしましょう!
それでは次回はリクエストパラメータの説明になりますが、よろしくお願いします!