最新ソースはこちら
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で回せるし、コントローラーとの意識のズレも防ぐことができます。
もっとうまい方法があるかもしれないけど、これが精一杯じゃ。
これで、登録処理が動くようになりました。
↑よかったらクリックお願いします。
「【Laravel】フォームからデータベースに登録する」への1件のフィードバック