40 代おっさん LaravelでMVCのVを学ぶ

## 本記事ついて

本記事は プログラミング初学者の私が学習していく中でわからない単語や概要をなるべくわかりやすい様にまとめたものです。
もし誤りなどありましたらコメントにてお知らせいただけるとありがたいです。

## 構築環境

・EC2:Amazon Linux2
・PHP7.3
・Laravel 5.8
・mariadb

## MVCとは

MVCとは、ソフトウェアの設計モデルの一つで、機能を「Model」（モデル）、「View」（ビュー）、「Controller」（コントローラ）の三つの役割に分離して実装し、それらが連携して処理を進める方式。
Modelはデータの管理や手続きを扱い、Viewは他の二要素からの指示を受けて利用者への表示・出力（の変更）を行い、システムによっては利用者の操作・入力内容をControllerに伝達する。Controllerは利用者からの操作や入力を受け付けて解釈し、ModelやViewに対応する処理を行うようメッセージを発する。

## View

画面表示のベースとなるもの、アドレスにアクセスするとコントローラはそのアドレスで使われるテンプレートを読み込んで表示する。
Laravelではテンプレートを読み込んだ後、その中の必要な情報をはめ込むなどして、実際の表示を生成することができる。これを<font color="Red">レンダリング</font>と呼ばれる。

### Blade（ブレード）

PHPのソースコードをそのままテンプレートとして使えるが、Laravelが独自に作成した<font color="Red">Blade</font>と呼ばれるテンプレートが使える。

#### Blade構文

##### {{　値・変数・式・関数など　}}
このように{{と}}の間に文を書くことで、その分が返す値をその場に書き出す
HTMLエスケープ処理される。
HTMLエスケープ処理ためHTMLタグなどをテキストとして設定した場合もすべてエスケープされるためHTMLのタグとして機能しない。
エスケープ処理されてほしくない場合は
{!!　値・変数・式・関数など　!!}

##### ディレクティブ

ディレクティブ機能がいくつか用意されている。
言語における構文のようなもの

###### <span>@</span>if
条件分岐

```php
@if (条件)
出力内容
@elseif (条件)
出力内容
@else
出力内容
@endif
```
###### <span>@</span>unless

条件が非成立の時の条件分岐

```php
@unless (条件)
出力内容
@endunless
```
＠ifの反対の動きをする。

###### <span>@</span>empty

変数が空の場合に表示

```php
@empty (変数)
出力内容
@endempty
```

（）に指定した変数が空の場合に表示を行うための物。
＠elseは、変数が空でない（値が設定されている）場合に表示

###### <span>@</span>isset

変数が定義済みの場合に表示

```php
@isset (変数)
出力内容
@endisset
```
変数が定義されている（そしてnullではない）場合に表示を行う。
＠elseを用意することで、変数が未定義だった場合の表示を用意できる。

###### <span>@</span>for

繰り返し構文

```php
@for ( 初期化 ; 条件 ; 後処理 )
繰り返す表示
@endfor
```

###### <span>@</span>foreach

メソッドは与えられた関数を、配列の各要素に対して一度ずつ実行する。

```php
@foreach ( $配列 ; $変数 )
繰り返す表示
@endforeach
```

###### <span>@</span>forelse

foreach-else構文に相当するもの

```php
@forelse ( $配列 ; $変数 )
繰り返す表示
@empty
$変数が空の時の表示
@endforelse
```

###### <span>@</span>while

while構文に相当するもの

```php
@while ( 条件 )
繰り返す表示
@endwhile
```
while分は変数の変化がない場合、無限ループになるので注意

###### <span>@</span>break

phpのbreakに相当。これが出力されると、繰り返しが中断する。

###### <span>@</span>continue

phpのcontinueに相当。これより後は表示せず、すぐに次の繰り返しに進む。

###### <span>@</span>php

phpのスクリプトを記述できるようにする。

```php
@php
phpのスクリプト
@endphp
```

<font color="Red">テンプレートに用意するスクリプトは必要最小限にするを忘れずに！！</font>

###### $loopによるループ変数

<table>
<tr><th>\$loop->index</th><th>現在のインデックス（ゼロから開始</th></tr>
<tr><th>\$loop->iteration</th><th>現在の繰り返し数（１から開始）</th></tr>
<tr><th>\$loop->remaining</th><th>あと何回繰り返すか（残り回数）</th></tr>
<tr><th>\$loop->count</th><th>繰り返しで使っている配列の要素数</th></tr>
<tr><th>\$loop->first</th><th>最初の練り返しかどうか（最初ならtrue）</th></tr>
<tr><th>\$loop->last</th><th>最期の練り返しかどうか（最期ならtrue）</th></tr>
<tr><th>\$loop->depth</th><th> 繰り返しのネスト数</th></tr>
<tr><th>\$loop->parent</th><th>ネストしている場合、親の繰り返しのループ変数を示す</th></tr>
</table>

### 実践！！

テンプレートファイルは<font color="Red">resources</font>ファルダ内の<font color="Red">views</font>に作る。
今回はhelloファルダを作り、その中にindex.blade.php(これでBladeが使える)を配置
とりあえず

```php
<html>
<head>
     <title>Hello/Index</title>
     <style>
         body {font-size:16pt; color:#999; }
         h1 { font-size:50pt; text-align:right; color:#f6f6f6;
             margin:-20px 0px -30px 0px; letter-spacing:-4pt}
     </style>
</head>
    <body>
        <h1>利樹大好き</h1>
        <P>{{$msg}}</P>
    </body>
</html>
```

これで出れば問題ないのですが、まだMVCのCを学んでいないので確かめれないです。
次はそちらを勉強します。

## 参考資料

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%AF-Laravel%E5%85%A5%E9%96%80-%E6%8E%8C%E7%94%B0%E6%B4%A5%E8%80%B6%E4%B9%83/dp/4798052582