新規登録作成
新規登録をするにはアクションの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
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
@foreachから@endforeachを追記
Bootstrapのtable
を追記
ポチは適当につけたのでご了承ください。
参考資料