CRUD(クラッド)とは
・Read(データ取得)
・Update(更新)
・Delete(削除)
の4つの頭文字をとって、まとめて略したものです。
この4つの機能はWebアプリでは基本となる機能となっています。
前回は Create にあたる部分を作成しました。
今回はCRUDアプリの Update(更新) の処理を作成します。
チュートリアル
手順
1)ルーティング
2)コントローラー
1.編集
2.UPDATE処理
3)ビュー
1.編集画面
2.確認画面
4)動作確認
1) ルーティング
リクエスト形式については、前回のチュートリアルでやった新規登録と同じようにします。
入力画面~(バリデーション)~確認画面 ⇒ PATCH
確認画面~(DBインサート処理)~完了画面 ⇒ POST
Route::group(['prefix' => 'student'], function () { : Route::get('edit/{id}/', 'StudentController@edit_index'); //編集 Route::patch('edit/{id}/','StudentController@edit_confirm'); //確認 Route::post('edit/{id}/', 'StudentController@edit_finish'); //完了 });
2)コントローラー
入力画面の表示
レコードの ID をパラメータで渡し、findOrFail() で該当のレコードを抽出します。
public function edit_index($id) { $student = \App\Student::findOrFail($id); return view('student.edit_index')->with('student',$student); }
入力画面 → 確認画面 の処理
バリデーションのルールは新規登録と同じなので、同じリクエストフォームを使います。
HTMLのフォームでリクエスト送信したデータは連想配列にしてwithメソッドを使ってビューに渡します。
public function edit_confirm(\App\Http\Requests\CheckStudentRequest $req) { $data = $req->all(); return view('student.edit_confirm')->with($data); }
確認画面 → 完了画面 の処理
findOrFailメソッドで該当するレコードを取り出し、更新をかけます。
更新完了したら
public function edit_finish(Request $request, $id) { //レコードを検索 $student = \App\Student::findOrFail($id); //値を代入 $student->name = $request->name; $student->email = $request->email; $student->tel = $request->tel; //保存(更新) $student->save(); //リダイレクト return redirect()->to('student/list'); }
3)ビュー
基本的に構成は新規登録画面と同じです。
コピーして edit_***.blade.php として、必要な箇所を編集します。
編集画面
: <form action="" method="post" class="form-horizontal"> {{ csrf_field() }} {{ method_field('patch') }} <div class="form-group @if($errors->has('name')) has-error @endif"> <label for="name" class="col-md-3 control-label">お名前</label> <div class="col-sm-9"> <input type="text" class="form-control" id="name" name="name" value="{{$student->name}}"> @if($errors->has('name'))<span class="text-danger">{{ $errors->first('name') }}</span> @endif </div> </div> <div class="form-group @if($errors->has('email')) has-error @endif"> <label for="email" class="col-md-3 control-label">メールアドレス</label> <div class="col-sm-9"> <input type="email" class="form-control" id="email" name="email" value="{{$student->email}}"> @if($errors->has('email'))<span class="text-danger">{{ $errors->first('email') }}</span> @endif </div> </div> <div class="form-group @if($errors->has('tel')) has-error @endif"> <label for="tel" class="col-md-3 control-label">電話番号</label> <div class="col-md-9"> <input type="tel" class="form-control" id="tel" name="tel" value="{{$student->tel}}"> @if($errors->has('tel'))<span class="text-danger">{{ $errors->first('tel') }}</span> @endif </div> </div> <div class="col-md-offset-3 text-center"><button class="btn btn-primary">確認</button></div> </form> :
確認画面
: <form action="" method="post" class="form-horizontal"> {{ csrf_field() }} <input type="hidden" name="name" value="{{$name}}"> <input type="hidden" name="email" value="{{$email}}"> <input type="hidden" name="tel" value="{{$tel}}"> <div class="row"> <label class="col-sm-4 control-label">お名前</label> <div class="col-sm-8">{{$name}}</div> </div> <div class="row"> <label class="col-sm-4 control-label">メールアドレス</label> <div class="col-sm-8">{{$email}}</div> </div> <div class="row"> <label class="col-sm-4 control-label">電話番号</label> <div class="col-sm-8">{{$tel}}</div> </div> <div class="row" style="margin-top: 30px;"> <div class="col-sm-offset-4 col-sm-8"> <input type="submit" name="button1" value="登録" class="btn btn-primary btn-wide" /> </div> </div> </form> :
4) 動作確認
一覧リスト
「編集」ボタンをクリック
編集画面
レコードがちゃんと抽出されているか確認
確認画面
送信したデータがちゃんと引き継がれているか確認
「レコードが更新されているか?」「一覧リストにリダイレクトされているか?」それぞれ確認します。
上記のようになっていればOKです。CRUDの更新処理は以上になります。
次回は最後のDlete(削除処理)になります。
仕事で Laravel を使っています。気づいたことや新しい発見など情報を発信していきます。問い合わせはこちら。