Laravelのルートパラメータは「必須」と「任意」を覚える
必須パラメータ
Laravelのルート定義をする際に、ルートパラメータの設定をする場合があります。
例えば、URLからユーザーIDや記事IDを取り出したい場合、取り出したいURLの部分を{}括弧で囲むことで、その囲まれた部分のパラメーターをコントローラーへ送ることができます。
とまあ、文章で書いてもよくわからないので例文を下記に記述します。
Route::get('user/{id}', function ($id) {
return 'User '.$id;
});
上記の例では、URIが「user/○○」だとした場合にマッチングするルート定義になっています。ルートパラメーターの定義は{id}として記述されていますね。
この場合、{id}にあたる部分である「○○」が$idに格納されます。
なので、上記例の場合、最終的には「User ○○」が出力されます。
ちなみに、上記の例は「必須パラメータ」と呼ばれ、もし{id}の部分がURIに含まれないケースでは、このルート定義にあてはまりません。
任意パラメータ
パラメータを指定しても、しなくてもOK!というような、任意でパラメータを入力したいということもあります。
その場合は、パラメータ名の最後に?マークを付けると任意指定可能なパラーメータになります。便利!
こちらも例を見てみましょう。
Route::get('user/{name?}', function ($name = null) {
return $name;
});
Route::get('article/{name?}', function ($name = 'study') {
return $name;
});
こんな感じで、{name?}のところはURIであってもなくても良いという感じです。
例えば、「user/masahiro」というURIでアクセスした際は「masahiro」と出力されますし、
「article」だけでアクセスした場合は、デフォルト値が適応されて「study」が出力されます。
パラメータの数は自由に書ける
Route::get('posts/{post}/comments/{comment}', function ($postId, $commentId) {
//
});
上記のように、必要に応じて{}を使用することでパラーメータの定義可能です。
{post}は\$postIdに対応していて、{comment}は\$commentIdに対応していますね。