Laravelの新規登録


# 新規登録作成
新規登録をするには***アクションのcreate***を使います。

# ルーティング
ルーティングを以下のように設定します。

```routes\web.php
Route::Group(['prefix' => 'contact','middleware' => 'auth'],function(){
Route::get('index','ContactFormController@index')->name('contact.index');
Route::get('create','ContactFormController@create')->name('contact.create');
});

//配列//prefixでフォルダ指定 //middleware' => 'auth認証の場合表示　//function コールバック
```

# コントローラー
コントローラーは下のように記述します。

```UserController.php
public function create()
    {
        return view('contact.create');
        //
    }
````

# view 
viewではindexを下のようにしました。

```view\user\index.php
@extends('layouts.app')

@section('content')
<div class="container">
    <div class="row justify-content-center">
        <div class="col-md-8">
            <div class="card">
                <div class="card-header">Dashboard</div>

                <div class="card-body">
                    @if (session('status'))
                        <div class="alert alert-success" role="alert">
                            {{ session('status') }}
                        </div>
                    @endif
                <form method = "GET" action = "{{route('contact.create')}}">;
                <button type = "submit" class = "btn btn-primary">
                新規登録
                </button>
                </form>
                インデックス
                </div>
            </div>
        </div>
    </div>
</div>
@endsection
```




```view\user\create.php
@extends('layouts.app')

@section('content')
<div class="container">
    <div class="row justify-content-center">
        <div class="col-md-8">
            <div class="card">
                <div class="card-header">Dashboard</div>

                <div class="card-body">
                    @if (session('status'))
                        <div class="alert alert-success" role="alert">
                            {{ session('status') }}
                        </div>
                    @endif

                    create  //creatと出力されるように
                </div>
            </div>
        </div>
    </div>
</div>
@endsection
```

# createにフォームを入れる
フォームを入れるには上のコードのcreateの部分に以下のように追加します。

```view\user\create.php

@extends('layouts.app')

@section('content')
<div class="container">
    <div class="row justify-content-center">
        <div class="col-md-8">
            <div class="card">
                <div class="card-header">Dashboard</div>

                <div class="card-body">
                    @if (session('status'))
                        <div class="alert alert-success" role="alert">
                            {{ session('status') }}
                        </div>
                    @endif

                    create  //ここから下追記
                    <form method ="POST" action = "">   
                    氏名
                    <input type = "text" name = "your_name">
                    <br>
                    件名
                    <input type = "text" name = "title">
                    <br>
                    メールアドレス
                    <input type = "text" name = "email">
                    <br>
                    ホームページ
                    <input type = "text" name = "url">
                    <br>
                    性別
                    <input type = "radio" name = "gender" value = "0">男性</input>
                    <input type = "radio" name = "gender" value = "1">女性</input>
                    <br>
                    年齢
                    <select name = "age">
                    <option value = "">選択してください</option>
                    <option value = "1">~19歳</option>
                    <option value = "2">20歳~29歳</option>
                    <option value = "3">30歳~39歳</option>
                    <option value = "4">40歳~49歳</option>
                    <option value = "5">50歳~59歳</option>
                    <option value = "6">60歳~</option>
                    </select>
                    <br>
                    お問い合わせ内容
                    <textarea name = "contact"></textarea>
                    <br>

                    <input type = "checkbox" name = "caution" value = "1">注意事項に同意する
                    <br>

                    <input class = "btn btn-info" type = "submit" value = "登録する">
                   </form>
　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　//この辺まで
                   </div>
            </div>
        </div>
    </div>
</div>
@endsection
````

![スクリーンショット 2022-04-17 13.28.01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1748789/9f3ddaf7-a2a4-296e-cc4a-a4f38d6dccdf.png)


# StoreとRequest
StoreとRequestの書き方です。

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

```UserFormController.php
 public function store(Request $request)
    {
        $name = $request->input('name');
        //nameはフォームに登録されている値
        $title = $request->input('title');
        $email = $request->input('email');
        $url = $request->input('url');
        $gender = $request->input('gender');
        $age = $request->input('age');
        $contact = $request->input('contact');

        //$input = $request->all();
        //全てのデータを取ってくる場合
    }
```

# storeの保存
storeの保存方法を紹介します。


```UserFormController.php
use App\Models\UserForm;　　　//useで呼び込む

//省略
public function store(Request $request)
    {

        $user = new UserForm;　//　インスタンス化

        $user->name = $request->input('name');
        //your_nameはフォームに登録されている値
        $user->title = $request->input('title');
        $user->email = $request->input('email');
        $user->url = $request->input('url');
        $user->gender = $request->input('gender');
        $user->age = $request->input('age');
        $user->contact = $request->input('contact');

        $contact->save();　保存

        return redirect('contact/index');　//最初の画面に戻す
    }

```

モデルはこの
```Models\UserForm.php
<?php

namespace App\Models;

use Illuminate\Database\Eloquent\Model;

class UserForm extends Model
{
    //
}
```
Controller\TestController.php

# DBに保存されているデータを取得

```Controller\TestController.php
use App\Models\Test;     //モデルのデータを持ってくる
use Illuminate\Support\Facades\DB;//クエリビルダ
```

クエリビルダを切り取って持って来ます。

```ContactFormController.php
use Illuminate\Support\Facades\DB;//クエリビルダ

//省略

 public function index()
    {
        //エロクワント　ORマッパー
        //$contacts = contactForm::all();

        //クエリビルダ
       $contacts =  DB::table('contact_forms')->select('id','your_name')->get();
        dd($contacts);

        return view('contact.index',compact('contacts'));
    }
```

```view\user\index.blade.php
@extends('layouts.app')

@section('content')
<div class="container">
    <div class="row justify-content-center">
        <div class="col-md-8">
            <div class="card">
                <div class="card-header">Dashboard</div>

                <div class="card-body">
                    @if (session('status'))
                        <div class="alert alert-success" role="alert">
                            {{ session('status') }}
                        </div>
                    @endif
                <form method = "GET" action = "{{route('contact.create')}}">
                <button type = "submit" class = "btn btn-primary">
                新規登録
                </button>
                </form>
                
            <table class="table">
            <thead>
            <tr>
            <th scope="col">#</th>
            <th scope="col">id</th>
            <th scope="col">名前</th>
            <th scope="col">件名</th>
            <th scope="col">登録日時</th>
            </tr>
        </thead>
        <tbody>
            @foreach($contacts as $contact)  
            <tr>
           <th>{{$contact->id}}</th>
           <td>{{$contact->your_name}}</td>
           <td>{{$contact->title}}</td>
          <td>{{$contact->created_at}}</td>
            </tr>
            @endforeach  
            </tbody>
            </table>
              </div>
            </div>
        </div>
    </div>
</div>
</table>
@endsection
```
![スクリーンショット 2022-04-17 19.22.32.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1748789/73159a0b-f377-4f1b-a124-b380a24945bc.png)

```@foreachから@endforeachを追記```
```Bootstrapのtable```を追記

ポチは適当につけたのでご了承ください。












# 参考資料

https://www.udemy.com/course/phpbeginnertolaravel/