概要
【PHP/Laravel】プログラミング初学者によるアプリケーション開発
https://qiita.com/AlpacaFace/items/b8e05a3da599815d8e31
上記トークアプリ開発の設計を説明します。
対象機能
- ユーザ退会機能
- 追加機能:フラッシュメッセージ機能の実装(ユーザ情報更新時、ユーザ退会時)
基本設計
*** 【定義】 ***
- ユーザ退会機能とは、登録済みのログインユーザ自身がトークアプリから退会する機能。
*** 【仕様】 ***
- 退会ボタンは、ユーザ情報を編集する画面から表示させる。
- 退会処理は、退会ボタンからのみ可能。
- 退会ボタンにはルーティングの住所が存在しない。
*** 【画面遷移】 ***
- 退会ボタンを一度押した時、「本当に退会しますか?」のメッセージが表示される。
- メッセージの下には「退会する」 「閉じる」 のボタンが表示される。
- 「閉じる」 を押すと、ユーザ情報の編集画面に戻る。
- 「退会する」を押すと、トップページに画面遷移する。退会後のトップページには自分の名前と、自分の名前に紐づいた投稿が全て削除されている。
*** 【再登録時の仕様】 ***
- 再び、同じユーザが新規登録しようとすると、メールアドレスが以前使用していたものが、既に使われていることになっており、使えない。
- ユーザ名やパスワードは同じものが使える。
*** 【操作権限】 ***
詳細設計
*** 【論理削除と物理削除】 ***
- 物理削除を採用。
- 外部キー制約を利用してユーザに紐づいた投稿も削除されるようにする。
*** 【Router】 ***
-
routes/web.php
(中略) // ログイン後 Route::group (['middleware' => 'auth'], function () { (中略) // ユーザ情報編集 Route::prefix('users')->group(function () { (中略) Route::delete('{id}', 'UsersController@destroy')->name('users.delete'); });
*** 【Controller】 ***
-
app/Http/Controllers/UsersController.php
-
ユーザ情報更新機能とフラッシュメッセージ機能
(中略) protected function store(UserRequest $request, $id) { $user = User::findOrFail($id); if (\Auth::id() === $user->id) { $user->name = $request->name; $user->email = $request->email; $user->password = bcrypt($request->password); $user->save(); $user_info_edit = []; if ($user_info_edit) { $user_info_edit_messageKey = 'infoedit_errorMessage'; $user_info_edit_flashMessage = __('flshmsg_user_info.edit_faild'); } else { $user_info_edit_messageKey = 'infoedit_successMessage'; $user_info_edit_flashMessage = __('flshmsg_user_info.edit_success'); } return redirect("/")->with($user_info_edit_messageKey, $user_info_edit_flashMessage); } return App::abort(404); }
-
ユーザ退会機能とフラッシュメッセージ機能
(中略) public function destroy($id) { $user = User::findOrFail($id); if (\Auth::id() === $user->id) { $user->delete(); $userquit = []; if ($userquit) { $messageKey = 'quit_errorMessage'; $flashMessage = __('flshmsg_user_info.quit_faild'); } else { $messageKey = 'quit_successMessage'; $flashMessage = __('flshmsg_user_info.quit_success'); } return redirect("/")->with($messageKey, $flashMessage); } return App::abort(404); }
*** 【flash message】***
-
resources/lang/ja/flshmsg_user_info.php
<?php // ユーザ情報編集画面のフラッシュメッセージ return [ // ユーザ情報編集_成功 'edit_success' => 'ユーザ情報が更新されました', // ユーザ情報編集_失敗 'edit_faild' => 'ユーザ情報の更新に失敗しました', // ユーザ退会_成功 'quit_success' => '退会が完了しました', // ユーザ退会_失敗 'quit_faild' => '退会処理に失敗しました', ];
*** 【View】 ***
-
resources/views/users/FlashMessages.blade.php
<!-- ユーザ情報編集 --> <!-- 成功 --> @if (session('infoedit_successMessage')) <div class="alert alert-success text-center w-50 mx-auto mb-3"> {{ session('infoedit_successMessage') }} </div> @endif <!-- 失敗 --> @if (session('infoedit_errorMessage')) <div class="alert alert-danger text-center w-50 mx-auto mb-3"> {{ session('infoedit_errorMessage') }} </div> @endif <!-- ユーザ退会処理 --> <!-- 成功 --> @if (session('quit_successMessage')) <div class="alert alert-danger text-center w-50 mx-auto mb-3"> {{ session('quit_successMessage') }} </div> @endif <!-- 失敗 --> @if (session('quit_errorMessage')) <div class="alert alert-danger text-center w-50 mx-auto mb-3"> {{ session('quit_errorMessage') }} </div> @endif