【Laravel】ルーティングについて2

こちらの記事は以下の書籍を参考に執筆しました

- [PHPフレームワークLaravel入門 第2版](https://www.amazon.co.jp/PHP%E3%83%95%E3%83%AC%E3%83%BC%E3%83%A0%E3%83%AF%E3%83%BC%E3%82%AFLaravel%E5%85%A5%E9%96%80-%E7%AC%AC2%E7%89%88-%E6%8E%8C%E7%94%B0-%E6%B4%A5%E8%80%B6%E4%B9%83/dp/4798060992/ref=tmm_hrd_title_0?_encoding=UTF8&qid=1595991312&sr=1-2)


#ルート情報の追加
ルート情報は`web.php`に追加します。

```php5
Route::get('hello', function () {
    return '<html><body><h1>Hello</h1><p>this is sample page.</p></body></html>';
});
```

>出典：[PHPフレームワークLaravel入門 第2版](https://www.amazon.co.jp/PHP%E3%83%95%E3%83%AC%E3%83%BC%E3%83%A0%E3%83%AF%E3%83%BC%E3%82%AFLaravel%E5%85%A5%E9%96%80-%E7%AC%AC2%E7%89%88-%E6%8E%8C%E7%94%B0-%E6%B4%A5%E8%80%B6%E4%B9%83/dp/4798060992/ref=tmm_hrd_title_0?_encoding=UTF8&qid=1595991312&sr=1-2)



このように記述した後`php artisan serve`を実行します。
その後`http://localhost:8000/hello`にアクセスするとこんな表示がされます。
![スクリーンショット 2020-06-28 8.58.21.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/136271/678b18a6-2d34-e8b5-3e12-1d540f413682.png)

#HTML出力
Router::getの第2引数の関数のreturnでHTMLを渡すとそのまま表示されます。

```php5
function(){
  return '.........HTMLのソースコード.........';
}
```

>出典：[PHPフレームワークLaravel入門 第2版](https://www.amazon.co.jp/PHP%E3%83%95%E3%83%AC%E3%83%BC%E3%83%A0%E3%83%AF%E3%83%BC%E3%82%AFLaravel%E5%85%A5%E9%96%80-%E7%AC%AC2%E7%89%88-%E6%8E%8C%E7%94%B0-%E6%B4%A5%E8%80%B6%E4%B9%83/dp/4798060992/ref=tmm_hrd_title_0?_encoding=UTF8&qid=1595991312&sr=1-2)


#ヒアドキュメントを使う
もちろんPHPで長文テキストを記述するのに使われるヒアドキュメントでも記述できます。
#ルートパラメータの利用
Route::getではアクセスするときにパラータを設定して値を渡すことができます。

```php5
Route::get('/○○/{パラメータ}',function($受け取る引数){...});
```

>出典：[PHPフレームワークLaravel入門 第2版](https://www.amazon.co.jp/PHP%E3%83%95%E3%83%AC%E3%83%BC%E3%83%A0%E3%83%AF%E3%83%BC%E3%82%AFLaravel%E5%85%A5%E9%96%80-%E7%AC%AC2%E7%89%88-%E6%8E%8C%E7%94%B0-%E6%B4%A5%E8%80%B6%E4%B9%83/dp/4798060992/ref=tmm_hrd_title_0?_encoding=UTF8&qid=1595991312&sr=1-2)


{パラメータ}に指定したものがそのまま引数取りして取り出せます。
##例

```php5
Route::get('hello/{msg}', function ($msg) {
    $html=<<<EOF
    <html lang="en" dir="ltr">
      <head>
        <meta charset="utf-8">
        <title></title>
      </head>
      <body>
        <h1>hello</h1>
        <p>{$msg}</p>
      </body>
    </html>
EOF;
  return $html
});
```

>出典：[PHPフレームワークLaravel入門 第2版](https://www.amazon.co.jp/PHP%E3%83%95%E3%83%AC%E3%83%BC%E3%83%A0%E3%83%AF%E3%83%BC%E3%82%AFLaravel%E5%85%A5%E9%96%80-%E7%AC%AC2%E7%89%88-%E6%8E%8C%E7%94%B0-%E6%B4%A5%E8%80%B6%E4%B9%83/dp/4798060992/ref=tmm_hrd_title_0?_encoding=UTF8&qid=1595991312&sr=1-2)


こう書いて
`http://localhost:8000/hello/this_is_test`にアクセスするとこうなります。
![スクリーンショット 2020-06-28 9.16.06.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/136271/15a2e624-4532-cece-656d-43b4dba0c5d7.png)

上の例では第1引数のパラメータは1つですが、複数でも可能です。

```php5
Route::get('hello/{id}/{passwd}', function ($id,$passed) {}
```

>出典：[PHPフレームワークLaravel入門 第2版](https://www.amazon.co.jp/PHP%E3%83%95%E3%83%AC%E3%83%BC%E3%83%A0%E3%83%AF%E3%83%BC%E3%82%AFLaravel%E5%85%A5%E9%96%80-%E7%AC%AC2%E7%89%88-%E6%8E%8C%E7%94%B0-%E6%B4%A5%E8%80%B6%E4%B9%83/dp/4798060992/ref=tmm_hrd_title_0?_encoding=UTF8&qid=1595991312&sr=1-2)


このパラメータ部分を省略してアクセスするとエラーになります。

パラメータを付けなくてもいい方法として**任意パラメータ**があります。
任意パラメータはパラメータの末尾に`?`をつけます。

```php5
Route::get('hello/{msg?}/', function ($msg='no message') {}
```

>出典：[PHPフレームワークLaravel入門 第2版](https://www.amazon.co.jp/PHP%E3%83%95%E3%83%AC%E3%83%BC%E3%83%A0%E3%83%AF%E3%83%BC%E3%82%AFLaravel%E5%85%A5%E9%96%80-%E7%AC%AC2%E7%89%88-%E6%8E%8C%E7%94%B0-%E6%B4%A5%E8%80%B6%E4%B9%83/dp/4798060992/ref=tmm_hrd_title_0?_encoding=UTF8&qid=1595991312&sr=1-2)


つまりこうです。

|パラメータの末尾に`?`が|種類|
|---|---|
|ある|任意パラメータ|
|ない|必須パラメータ|