初学者がLaravelを学び始める2(ルーティング)

##サーバーを起動させる

```
php artisan serve
```

このコマンドによってサーバーを起動させることができます。

##ルート情報を追加する（htmlを表示する）
次にルーティングを設定していきます。
仮にweb.phpに以下のルート情報を記述した場合は

```web.php
Route::get('/', function () {
    return view('welcome');
});

省略

Route::get('hello',function () {
   return '<html><body><h1>おはよう</h1><p>これは見本です！！</p></body></html>';
});

```

http ://localhost:8000/helloにアクセスすると
web.phpで記述したhtmlを表示することができる。（おはよう　これは見本です！！が表示される）これが追加したルート情報による表示である。

##ヒアドキュメントを使う
ヒアドキュメントはPHPで長文テキストを記述するときに使われるものです。演算子を使って、リスト内に直接記述されたテキストをまとめて変数などに代入できます。

```
Route::get('/', function () {
    return view('welcome');
});

省略

$html = <<<EOF
<html>
<head>
<title>Hello</title>
<style>
body {font-size:16pt; color:#999; }
h1 { font-size:100pt; text-align:right; color:#eee;
   margin:-40px 0px -50px 0px; }
</style>
</head>
<body>
   <h1>Hello</h1>
   <p>This is sample page.</p>
   <p>これは、サンプルで作ったページです。</p>
</body>
</html>
EOF;

Route::get('hello',function () use ($html) {
   return $html;
});
```
/helloにアクセスするとある程度デザインされた形で表示されます。
こんな感じです↓
![スクリーンショット 2021-04-11 0.11.22.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/927542/b6d1bf4b-9230-57ef-7c6b-376ed1357091.png)

このようにヒアドキュメントを使ってhtmlのソースコードをきちんと用意できればroute::getだけである程度のウェブページを作ることはできます。
もちろんこれはこういったこともできるということであって本格的なウェブページを作る場合には別の方法が用意されています。

大切なことはroute::getの役割としてreturnする関数を用意すればそのままウェブページが表示されるという仕組みを理解することです。


##ルートパラメーターの利用
route::getでは、アクセスするときにパラメーターを設定して値を渡すことができる.
書き方としては以下のようになる

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

第一引数のアドレス部分に{パラメーター}という形でパラメーターを渡しています。
これによって{パラメーター}に指定されたテキスト部分がパラメーターとして取り出せるようになります。

第二引数の関数ではパラメーターの値を受け取る変数として引数を用意しておきます。
ここは{パラメーター}と同じ名前である必要はありません。{パラメーター}で指定したパラメーターはそのまま関数の引数に渡されます。
パラメーターは複数用意することもでき、関数の引数を複数用意することによって値を受け取ることができます。

###パラメーターを利用する
以下のコードに修正する。
今回はヒアドキュメント内に変数を埋め込んで使用するためRoute::getの第二引数に用意するクロージャ（無名関数）ないにヒアドキュメントを移動している。

```
Route::get('hello/{msg}',function ($msg) {

$html = <<<EOF
<html>
<head>
<title>Hello</title>
<style>
body {font-size:16pt; color:#999; }
h1 { font-size:100pt; text-align:right; color:#eee;
   margin:-40px 0px -50px 0px; }
</style>
</head>
<body>
   <h1>Hello</h1>
   <p>{$msg}</p>
   <p>これは、サンプルで作ったページです。</p>
</body>
</html>
EOF;

   return $html;
});

```



![スクリーンショット 2021-04-11 14.53.26.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/927542/7c776ebd-18a3-3bda-8894-0b0b53150daa.png)

この状態でhttp://localhost：8000/hello/this_is_test にアクセスした場合
「this_is_test」の部分がパラメーターとして取り出されwebページに表示される。

解説していくと第一引数'hello/{msg}'とhello/の後に{msg}というパラメーターがあり、第二引数のグロージャの引数に$msgがあるため{msg}の値が$msg引数に渡されることになる。

今回は一つのパラメーターだけを用意したが複数になってもやることは同じです。

```
Route::get('hello/{id}{pass}'),function($id,$pass){省略});
```
このように書いた場合$idと$passの二つのパラメーターを引数として利用できるようになる。

##必須パラメーターと任意パラメーター

今までのパラメーターは基本的に必須パラメーターとなっています。必須パラメーターは指定せずにアクセスするとエラーになってしまいます。用意されているルートパラメーターは必ずつけてアクセスしなければなりません。

パラメーターをつけなくともアクセスするためには任意パラメータを使います。
任意パラメータとは名の通り「任意につけて利用できるパラメータ」です。

第一引数のパラメータの末尾に？をつけることで使用できます。
第二引数の関数では、値が渡される仮引数にデフォルト値を指定し引数が渡されなくとも処理ができるようにしておきます。

今までのコードを任意パラメータを使って一行目を以下のように書き換えると
パラメータをつけずにアクセスしたためデフォルトのno message.が表示されています。

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

$html = <<<EOF
<html>
<head>
<title>Hello</title>
<style>
body {font-size:16pt; color:#999; }
h1 { font-size:100pt; text-align:right; color:#eee;
   margin:-40px 0px -50px 0px; }
</style>
</head>
<body>
   <h1>Hello</h1>
   <p>{$msg}</p>
   <p>これは、サンプルで作ったページです。</p>
</body>
</html>
EOF;

   return $html;
});

```

![スクリーンショット 2021-04-11 21.44.35.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/927542/09cf4bff-9431-0b2e-de23-49faf60169b3.png)