PHP

Laravel入門#03(コントローラでルートパラメータを取得)

前回のコントローラの続きです。
今回からコントローラでパラメータの取得方法について学んでいきたいと思います。

※前回の記事をまだお読みでない方は以下からお読みください。

Laravel入門#02(コントローラ)今回はLaravelを使うにあたり重要な要素である「コントローラ」について説明・使用をしていきたいと思います。 MVC(Model V...

パラメータの受け取り方にはルートパラメータ、リクエストパラメータの二つがありますが、長くなりそうなので、今回はルートパラメータの説明からしたいと思います。

Laravelのコントローラでルートパラメータを取得

ルートパラメータとはURLから情報を取得することを言います。

例えば、「http://127.0.0.1:8081/hello-world/taro/12」とアクセスしたら、URLから「taro」と「12」を取得することがLaravelでは簡単に実現できます。

ではルートパラメータを取得する方法について見ていきます。

ルート定義とクラス編集

ルート定義を以下のように修正します。

routes/web.php
// コントローラのindexアクションへ、ルートパラメータを定義
Route::get('/hello-world/{name?}/{age?}', 'HelloWorldController@index');

次にHelloWorlControllerのindexアクションを以下のように修正してください。

app/Http/Controllers/HelloWorldController.php
<?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からパラメータ値を取得できましたと思います!

任意パラメータについて

またルート定義をよく見て下さい。

Route::get(‘/hello-world/{name?}/{age?}’, ‘HelloWorldController@index’);

「name」と「age」の後ろに「?」がついてるのが気づきましたでしょうか?

「?」をつけることによって任意パラメータとして認識されます。

これをつけないと必須パラメータとなり、先ほどの例で言えば「/taro/12」がないと404エラー(ページ存在しないエラー)となってしまいます。

任意パラメータがないと…?

それではルートパラメータをつけない状態でアクセスしてみましょう。

※http://127.0.0.1:8081/hello-world/へアクセス

nameに「noname」、ageに「20」が表示されていることが分かりますでしょうか?

public function index(string $name = ‘noname’, int $age = 20)

これはアクションの上記の通り、メソッドにデフォルト引数を渡しているため、任意パラメータが渡されていない場合、そちらの値が使われることになります。

さいごに

ご覧いただいたようにLaravelではパラメータの取得方法を簡潔に実装することができます。
実務でもルートパラメータは当たり前のように使われますので、ぜひ、使いこなせるようにしましょう!

それでは次回はリクエストパラメータの説明になりますが、よろしくお願いします!