1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

Laravelの新規登録

Posted at

新規登録作成

新規登録をするにはアクションの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

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

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

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

参考資料

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?