最新ソースはこちら
https://github.com/takishita2nd/hotel-mng
前回からの続きです。
今回はデータベースに登録するフォームを作成し、そこから実際にデータを登録するところまで作成します。
まずは、登録フォームの作成から。
フォームを作るには、ヘルパーを使うのがいいです。
$ composer require "laravelcollective/html":"^5.4.0"
これでフォームのヘルパーが使えます。
Viewはこんな感じで作成しました。
@extends('layouts.app')
@section('content')
<div class="container">
<div class="row">
<div class="col-md-8 col-md-offset-2">
<div class="panel panel-default">
<div class="panel-heading">予約登録</div>
<div class="panel-body">
{!! Form::open(['url' => action('RegisterManagementController@store')]) !!}
<table>
<tr>
<td>名前</td>
<td>{!! Form::text('name') !!}</td>
</tr>
<tr>
<td>住所</td>
<td>{!! Form::text('address') !!}</td>
</tr>
<tr>
<td>電話番号</td>
<td>{!! Form::number('phone') !!}</td>
</tr>
<tr>
<td>人数</td>
<td>{!! Form::select('num', ['1' => 1, '2' => 2]) !!}</td>
</tr>
<tr>
<td>宿泊日数</td>
<td>{!! Form::select('days', ['1' => 1, '2' => 2, '3' => 3, '4' => 4]) !!}</td>
</tr>
<tr>
<td>宿泊日</td>
<td>{!! Form::date('start_day', \Carbon\Carbon::now()) !!}</td>
</tr>
</table>
{!! Form::submit('登録') !!}
{!! Form::close() !!}
</div>
</div>
</div>
</div>
</div>
@endsection
Form::open()〜Form::close()までがフォームの部分です。
この間にいろいろ入力コントロールを入れます。

こんな感じで表示されます。便利。
登録ボタンを押したときの処理も追加します。
ルーティングの設定。
Route::get('/management/create', 'RegisterManagementController@create');
Route::post('/management', 'RegisterManagementController@store');
コントローラーの設定。
/**
* 入力フォーム
*/
public function create()
{
return view('register.create');
}
/**
* 登録処理
*/
public function store(Request $request)
{
$param = $this->registerManagement->getParam();
$this->registerManagement->add([
$param[0] => $request->name,
$param[1] => $request->address,
$param[2] => $request->phone,
$param[3] => $request->num,
$param[4] => $request->days,
$param[5] => $request->start_day
]);
return redirect('management');
}
$requestの中に、フォームに入力したデータが入ってます。
リポジトリからモデルに設定するパラメータを取得し、これらを連想配列に設定して、リポジトリに渡します。
その後、リダイレクトを行います。
次にリポジトリの設定。
private $paramNames = ['name', 'address', 'phone', 'num', 'days', 'start_day'];
// 予約を登録する
public function add($param)
{
$model = new ReserveManagement;
foreach($this->paramNames as $name)
{
$model->$name = $param[$name];
}
$model->save();
}
public function getParam()
{
return $this->paramNames;
}
パラメータ名を配列で持たせることによって、foreachで回せるし、コントローラーとの意識のズレも防ぐことができます。
もっとうまい方法があるかもしれないけど、これが精一杯じゃ。
これで、登録処理が動くようになりました。

↑よかったらクリックお願いします。























