Laravel5で確認画面を経由したDB登録を実装する

2016.05.21

Laravelで入力フォームと確認フォームを作ったのですが、ちょっと手間取ったのでメモです。

画面の流れは以下の通りになります。

画面の流れ
1.入力フォーム
2.確認フォームへ入力内容を表示
3.DBへ入力内容を登録。完了画面を表示

やりたい事は入力フォームで入力した内容を、確認画面で確認後、データベースへ登録し、完了画面へ表示です。2から3へのデータ渡しにはセッションを使用しました。

各バージョン

  • XAMPP 3,2,1
  • PHP 5.6.12
  • Laravel 5,2,29


ROUTING

routes.php に以下3行を追加します。

// App/Http/routes.php
Route::get('test', 'TestController@index');
Route::post('test','TestController@confirm');
Route::post('test/complete','TestController@complete');

特に注意点などありませんが、敢えて言うなら「get」と「post」の使い分けに注意!うっかり、書き間違えたり勘違いしたりするんですよね。あれ?私だけ?

CONTROLLER

TestControllerを作成します。

// App/Http/Controllers/TestController.php
// 入力フォーム
public function index()
{
return view('test.index');
}
// 確認フォーム
public function confirm(Request $request)
{
$data = $request->all();
$request->session()->put($data); // 1)
return view('test.confirm', compact("data"));
}
// 完了フォーム
public function complete()
{
$data = session()->all(); // 2)
DB::table('test')->insert([
'nicname' => $data["nicname"],
'email' => $data["email"]
]); // 3)
return view('test.complete');
}
  • 1)入力フォームの内容をセッションへ保存
  • 2)セッションの値を取得
  • 3)入力内容をデータベースへ挿入

VIEW

index.blade.php(入力フォーム)を作成します。

// resources/views/test/index.blade.php
<div class="container">
{!! Form::open(array('files' => true)) !!}
<div class="form-group">
{!! Form::label('nicname', 'ニックネーム:') !!}
{!! Form::text('nicname', null, ['class' => 'form-control']) !!}
</div>
<div class="form-group">
{!! Form::label('email', 'メールアドレス:') !!}
{!! Form::email('email', null, ['class' => 'form-control']) !!}
</div>
<div class="form-group">
{!! Form::submit("Send", ['class' => 'btn btn-primary form-control']) !!}
</div>
{!! Form::close() !!}
</div>

index.blade.php(登録確認フォーム)を作成します。

// resources/views/test/confirm.blade.php
<div class="container">
{!! Form::open(['url' => 'test/complete', 'method' => 'post']) !!}	
<div class="form-group">
{!! Form::label('nicname', 'ニックネーム: '. $data["nicname"]) !!}
</div>
<div class="form-group">
{!! Form::label('email', 'メールアドレス: '. $data["email"]) !!}
</div>
<div class="form-group">
{!! Form::submit("Send", ['class' => 'btn btn-primary form-control']) !!}
</div>
{!! Form::close() !!}
</div>

index.blade.php(登録完了フォーム)を作成します。

// resources/views/test/complete.blade.php
<div class="container">
<h1>登録完了!</h1>
<hr/>
</div>

DB

testテーブルを作成します。

create table DB名.test(nicname varchar(20), email varchar(255));

ここで痛恨のミス発覚。ニックネームのスペルが違う。あぁ、恥ずかしい。でも面白いのでそのまま進みます。

テーブルを確認。

mysql> show columns from DB名.test;
+---------+--------------+------+-----+---------+-------+
| Field   | Type         | Null | Key | Default | Extra |
+---------+--------------+------+-----+---------+-------+
| nicname | varchar(20)  | YES  |     | NULL    |       |
| email   | varchar(255) | YES  |     | NULL    |       |
+---------+--------------+------+-----+---------+-------+

確認

http://ドメイン名:8000/testへアクセスして入力フォーム画面の表示を確認します。

Laravel入力フォーム
入力項目を埋めたら「確認」ボタンを押します。

Laravel確認画面
入力内容が表示されました。確認したら「登録」ボタンを押します。

Larave完了画面
無事完了!


データベースの中身を確認

さて、入力内容は登録されているでしょうか?確認してみます。

mysql>mysql> select * from ppr.test;
+---------+-------------------+
| nicname | email             |
+---------+-------------------+
| あゆ    | ayu@test.mail     |
+---------+-------------------+
1 row in set (0.00 sec)

無事に登録されました。

以上、Laravelでの入力フォームの作成でした。

関連する記事

CATEGORY

ARCHIVE

NEW