2022/04/19
前回は「新規登録」ページの作成をしました。
今回は「編集画面」のページを作成しています。
今回のゴール
【 今回の作業 】
・ルーティングの設定
・コントローラの作成
・IDによるレコード抽出処理、UPDATE処理
・ビューの作成
手順
手順
1)リンク先の設定
「一覧画面」の編集ボタンのリンク先を設定します。
@foreach($students as $student)
<tr>
<th scope="row">{{$student->id}}</th>
<td>{{$student->name}}</td>
<td>{{$student->email}}</td>
<td>{{$student->tel}}</td>
<td><button type="button" class="btn btn-success">詳細</button></td>
<td><a href="/student/edit/{{$student->id}}"><button type="button" class="btn btn-primary">編集</button></a></td>
<td><button type="button" class="btn btn-danger">削除</button></td>
</tr>
@endforeach
2)ルーティングの設定
前回、作成した「新規登録」のURIに追記していきます。
URLには "student" というプレフィックスでまとめまています。
:
Route::group(['prefix' => 'student'], function () {
Route::get('list', 'CrudController@getIndex'); // 一覧
Route::get('new', 'CrudController@new_index'); // 入力
Route::patch('new','CrudController@new_confirm'); // 確認
Route::post('new', 'CrudController@new_finish'); // 完了
/**
* 編集
*/
Route::get('edit/{id}/', 'CrudController@edit_index'); // 編集
Route::patch('edit/{id}/','CrudController@edit_confirm'); // 確認
Route::post('edit/{id}/', 'CrudController@edit_finish'); // 完了
});
3)コントローラの作成
作成した CrudController.php に
・編集画面(入力)
・編集画面(確認)
・編集画面(登録)
追記していきます。
/**
* 編集画面(入力)
*/
public function edit_index($id)
{
$student = \App\Student::findOrFail($id);
return view('student.edit_index')->with('student',$student);
}
/**
* 編集画面(確認)
*/
public function edit_confirm(\App\Http\Requests\ValiCrudRequest $req)
{
$data = $req->all();
return view('student.edit_confirm')->with($data);
}
/**
* 編集画面(完了)
*/
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->message = $request->message;
//保存(更新)
$student->save();
//リダイレクト
return redirect()->to('student/list');
}
確認画面の入力チェック(フォームリクエスト)については以下のページで詳しく解説しています。
Bootstrap4 フォーム(HTML×Laravel バリデーション)
4)ビューの作成
ビューのHTMLフォームは以下の以下のページで詳しく解説しています。
Bootstrap4テンプレート フォーム用(HTMLバリデーション
下記は入力フォームの「お名前」だけ抜粋します。残り項目も同じように。
入力画面
コントローラでIDを条件にレコードを抽出します。
それをビュー側のフォームの value 属性で表示します。
<!--お名前-->
<div class="form-group row">
<label for="inputName" class="col-sm-2 col-form-label">お名前</label>
<div class="col-sm-10">
<input type="text" name="name" value="{{ $student->name }}" class="form-control @if($errors->has('name')) is-invalid @endif" id="inputName" placeholder="山田 太郎" required>
@if($errors->has('name'))
<div class="invalid-feedback">{{ $errors->first('name') }}</div>
@else
<div class="invalid-feedback">必須項目です</div><!--HTMLバリデーション-->
@endif
</div>
</div>
<!--/お名前-->
確認画面
「新規登録」で作成した確認画面と同じです。
特に修正する必要はありあません。
<!--お名前-->
<div class="form-group row">
<label class="col-sm-2 col-form-label">お名前</label>
<div class="col-sm-10">{{$name}}</div>
</div>
<!--/お名前-->
5)動作確認
ブラウザを開いて http://localhost/student/list にアクセスします。
上記のように表示されればOKです。
以上です。
仕事で Laravel を使っています。気づいたことや新しい発見など情報を発信していきます。問い合わせはこちら。