LoginSignup
0
2

<設計>ユーザ退会機能

Last updated at Posted at 2023-08-13

概要

【PHP/Laravel】プログラミング初学者によるアプリケーション開発
https://qiita.com/AlpacaFace/items/b8e05a3da599815d8e31

上記トークアプリ開発の設計を説明します。

対象機能

  • ユーザ退会機能
  • 追加機能:フラッシュメッセージ機能の実装(ユーザ情報更新時、ユーザ退会時)

基本設計

*** 【定義】 ***

  • ユーザ退会機能とは、登録済みのログインユーザ自身がトークアプリから退会する機能。

*** 【仕様】 ***

  • 退会ボタンは、ユーザ情報を編集する画面から表示させる。
  • 退会処理は、退会ボタンからのみ可能。
  • 退会ボタンにはルーティングの住所が存在しない。

*** 【画面遷移】 ***

  • 退会ボタンを一度押した時、「本当に退会しますか?」のメッセージが表示される。
  • メッセージの下には「退会する」 「閉じる」 のボタンが表示される。
  • 「閉じる」 を押すと、ユーザ情報の編集画面に戻る。
  • 「退会する」を押すと、トップページに画面遷移する。退会後のトップページには自分の名前と、自分の名前に紐づいた投稿が全て削除されている。

*** 【再登録時の仕様】 ***

  • 再び、同じユーザが新規登録しようとすると、メールアドレスが以前使用していたものが、既に使われていることになっており、使えない。
  • ユーザ名やパスワードは同じものが使える。

*** 【操作権限】 ***

<まとめ>ユーザ退会ボタン操作
図7.png

詳細設計

*** 【論理削除と物理削除】 ***

  • 物理削除を採用。
  • 外部キー制約を利用してユーザに紐づいた投稿も削除されるようにする。

*** 【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
    

動作確認テスト

  • ユーザ情報を編集する
    ユーザ情報を編集する.jpeg

ユーザ情報を編集後フラッシュメッセージ表示.jpeg

  • ユーザ退会
    退会する.jpeg

本当に退会しますか.jpeg

退会完了後フラッシュメッセージ表示.jpeg

0
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
2