Laravelのルーティングからコントローラー,MVCまで

# ルーティングの書き方
下がルーティングの書き方です。

```routes\web.php
Route::get('tests/test','TestController@index'); 
             //url        コントローラーのindex

Route::get('user/index','UserController@index'); //url  コントローラー
```

下がコントローラーの書き方です。
```Controllers\user.php
class ContactFormController extends Controller
{
    //省略

    public function index()
    {
        //
        return view('user.index');//viewのuserファイルのindex.phpに書いてある処理のこと
    }

   //省略

}
```
コントローラーで処理をしてviewに渡します。

```views\users\index.php
テスト
```

# ルートグループ
ルートごとに定義するのではなく、一括して適用するため方法で```Route::groupメソッド```を使います。

```routes\web.php
Route::Group(['prefix' => 'user','middleware' => 'auth'],function(){
Route::get('index','UserController@index')->name('contact.index');
});
  //配列　　　　　
  //prefixでフォルダ指定　　　
  //middleware' => 'auth認証の場合表示　
  //function コールバック

Auth::routes();//認証機能
```

![スクリーンショット 2022-04-16 23.59.22.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1748789/f4be3139-bbd5-010a-cea3-e427f506f595.png)

のような画面になりました。

# コントローラーのアクション一覧
　次にコントローラーについてです。下はコントローラーアクション一覧です。

![スクリーンショット 2022-04-16 17.00.37.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1748789/780d1c5f-0ee4-04b2-6111-db9684ac4802.png)

>引用　https://readouble.com/laravel/6.x/ja/controllers.html


# コントローラー
コントローラーはクライアントから送られてきたデータをサーバーに返す時に
モデルやviewに指示を出すような処理をする部分です。

MVCモデルをみてみると

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1748789/31fcb3ee-1503-abbf-b65e-60cb02bc868b.png)

>引用　　https://qiita.com/s_emoto/items/975cc38a3e0de462966a

上のような流れで処理がされます。

# コントローラー作成
コントローラーを作成する時は下のような構成になります。

```
App\Http\Controllers
```

コントローラー作成をします。

```
$ php artisan make:controller コントローラー名
```
今回はUserコントローラーを作ります。
```
$ php artisan make:controller TestController
```
下のように作成されます。
```app\\Http\Controllers.php
<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;

class TestController extends Controller
{
    //
}
```

# MVCモデルを書く
MVCそれぞれの書き方を書いていきます。

⚫︎ルーティング

```routes/web.php
Route::get('tests/test','TestController@index');
```

⚫︎コントローラー
```TestController.php
<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;

class TestController extends Controller
{
    //
    public function index()
    {
       return('tests.test');
    }
}
```

***viewファイルにはbladeをつける***ようにしてください。
```views\tests\test.blade.php
PHP
```
で***サーバーを起動し、http://127.0.0.1:8000/tests/testで見ると
PHPと出力***されます。

![スクリーンショット 2022-04-15 18.36.15.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1748789/ba461551-b779-91cb-67ea-022071875d97.png)



### dd($変数;
```dd($変数);```は***(do + var_dump)を省略***した形です。

```Controllers\TestController.php
<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;

use App\Models\Test;     //モデルのデータを持ってくる

class TestController extends Controller
{
    
     public function index()
    {
        $values = Test::all(); //Testモデルから取ってくる
        dd($values); //ここ
      //do + var_dump
       return view('tests.test');
       //viewのファイル
     }
}
```

すると、
![スクリーンショット 2022-04-15 18.44.42.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1748789/cf5dab20-69ea-5c8b-e43b-3d1d6686ab45.png)
のように変数の中身を表示させてくれます。

$変数(ここでは$values)のファイルをviewファイルで表示させます。
それで

```Controllers\TestController.php
<?php

//省略

class TestController extends Controller
{ 
     public function index()
    {
        $values = Test::all(); //Testモデルから取ってくる
        //dd($values);
      //do + var_dump
       return view('tests.test',compact('values'));　　//この部分を追記
       //viewのファイル
     }
}
```

そしてviewに表示させたいことを書きます。
```test.blade.php
PHP<br>
@foreach($values as $value) //複数形　単数形で表示し配列を表示
{{$value->id}}<br>
{{$value->text}}<br>

@endforeach
```
これで出力すると

![スクリーンショット 2022-04-15 18.56.53.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1748789/e0556ac0-1f58-0301-0946-d634b85cbb6a.png)

ここで表示されているのは以前tinkerで作ったデータベースの中身のことです。

### blade
上の***viewのコードはビューの中にPHPを直接記述することを許している
]Laravelのテンプレートエンジン***です。

```{{}}```は```XSS攻撃```を防ぐために***PHPのhtmlspecialchars関数を自動的に通されます***。









# 参考資料
https://www.udemy.com/course/phpbeginnertolaravel/

https://readouble.com/laravel/6.x/ja/controllers.html