Web家計簿を、CakePHP3 Webサーバー環境構築で構築した環境にアップすることを目標に、複数回に分けてWeb家計簿を作って行きます。
============================
CakePHP3でWeb家計簿 記事一覧
③Security.saltの変更~DebugKitの非表示
⑬退会機能の作成 ←現在の記事
============================
今回は、退会機能の作成を行います。
手順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']);
}
//他の処理・・・・・
}
次回記事では、パスワード再設定機能の作成を行います。