CakePHP3でWeb家計簿 ⑬退会機能の作成 | ゆきみのWeb開発帳

ゆきみのWeb開発帳

IT系のSEもどきが、個人の勉強の為に、CakePHP3やPython3などでの開発記録を綴ります。
勉強不足な面もありますが、日々成長中です。

Web家計簿を、で構築した環境にアップすることを目標に、複数回に分けてWeb家計簿を作って行きます。

 

============================

CakePHP3でWeb家計簿 記事一覧

①基本設計

②usersテーブルの作成~bakeコマンド

③Security.saltの変更~DebugKitの非表示

④routes.phpの設定~default.ctpの編集

⑤User.phpの編集

⑥ログイン・ログアウト機能の作成

⑦ユーザー登録機能の作成

⑧トップページ表示機能の作成

⑨マイページ(ユーザー情報閲覧)機能の作成

⑩ユーザー情報編集機能の作成

⑪年月日を日本的な表記へ変更

⑫ユーザー情報登録・編集時のバリデーション

⑬退会機能の作成 ←現在の記事

⑭パスワード再設定機能の作成

⑮favicon(ファビコン)の配置

⑯accountsテーブルの作成~bakeコマンド

⑰家計簿登録機能の作成

⑱家計簿一覧機能の作成

⑲家計簿編集機能の作成

⑳家計簿削除機能の作成

㉑家計簿登録・編集時のバリデーション

============================

 

 

今回は、退会機能の作成を行います。

 

 

手順1.退会画面の編集
作成したプロジェクト\src\Template\Users に『unsubscribe.ctp』を作成します。日本語でメッセージを出力するため、ファイルをUTF-8で保存します。


<?php
    //ページタイトル変更
    $this->assign('title', '退会 - オンライン家計簿');
    
    //CSS変更
    echo $this->Html->css($layout)
?>

<!-- ページナビの生成 -->
<nav class="top-bar expanded" data-topbar role="navigation">
    <ul class="title-area large-3 medium-4 columns">
        <li class="name">
        <h1><a href="/PROJECTNAME/users/top">オンライン家計簿 <?=$this->Html->image('imgchar.png',array('width'=>'20','height'=>'20')); ?></a></h1>
        </li>
    </ul>
    <div class="top-bar-section">
        <ul class="right">
            <li><a href="/PROJECTNAME/users/view">マイページ</a></li>
            <li><a href="/PROJECTNAME/users/logout">ログアウト</a></li>
        </ul>
    </div>
</nav>


<!-- ログインフォーム生成 -->
<div class="users form large-12 medium-12 columns content">
    <h3>退会についての注意事項</h3>
    <p>登録されたユーザー情報・家計簿データは全て削除致します。</p>
    <br>
    <?= $this->Form->create() ?>
        <?= h($user->username) ?> 様
        <p>本当に退会しますか?</p>
        <br>
        <button type='submit' style="float:none;">退会する</button>
    <?= $this->Form->end() ?>
</div>

 

手順2.退会メソッドの作成

作成したプロジェクト\src\Controller にある『UsersController.php』を編集します。

 

class UsersController extends AppController
{

  //他の処理・・・・・

 

    //退会
    public function unsubscribe($id = null)
    {
        //DB上書きフラグ
        $save_flag = true;
        
        //Authコンポーネントからユーザー情報を引継ぎ
        $id = $this->Auth->user('id');
        
        //自動遷移先
        $url = 'https://www.google.co.jp/';
        
        //テーブルから、PRIMARYキー(id)を元にユーザー情報を取り出す
        $user = $this->Users->find()->where(['Users.id' => $id])->first();
        
        //テーブルの各値をセット
        $status = $user->status;
        $layout= $user->pageimg;
        
        //論理削除などのフラグが立っていたら、自動遷移先に遷移する
        if($status != null){
            $this->Flash->error(__('このユーザーは現在使用できません。'));
            $this->redirect($url);
        }
        
        //ページイメージを置き換え
        switch ($layout){
            case 1:
                $layout = "pink.css";
                break;
            case 2:
                $layout = "blue.css";
                break;
            case 3:
                $layout = "orange.css";
                break;
            case 4:
                $layout = "green.css";
                break;
            default:
                $save_flag = false;
                $this->redirect($url);
        }
        
        
        if ($this->request->is('post')) {
            $user->status = 1;
            
            //usersテーブル更新
            $user = $this->Users->patchEntity($user, $this->request->getData());
            if ($this->Users->save($user)) {
                $this->request->session()->destroy(); //セッションの破棄
                $this->Flash->success(__('退会しました。今までありがとうございました。'));

                return $this->redirect(['action' => 'login']);
            }
            $this->Flash->error(__('退会出来ませんでした。'));
        }
        
        //ctpで使う変数に値をセット
        $this->set('layout', $layout);
        $this->set(compact('user'));
        $this->set('_serialize', ['user']);
    }

 

  //他の処理・・・・・

}

 

次回記事では、パスワード再設定機能の作成を行います。