[CakePHP] POSレジシステム 修正

タグ :

これまでの基礎知識を結集して簡易アプリを作成するシリーズです。
今回は前回までの「POSレジシステム」に問題が発覚したので、修正します。

問題箇所というのは、ユーザー登録をする場合に、同じメールアドレスで登録を実行した場合、レジの表示がエラい事になってしまうという点です。

修正版は こちら でお試しください。

問題箇所詳細

ユーザー登録時に、「メールアドレス」「パスワード」「店舗名」を入力しますが、既に登録済みのメールアドレスで再登録した場合に、登録が出来てしまうというのが問題です。

ユーザー登録時に同時にレジの商品データもデフォルトで登録を掛けているので、レジの商品データが2回も登録されてしまうことになり、以下のような感じで表示されてしまいます。

cake_posreg_correct_image

同じように登録済みのアドレスを3回登録すると、商品も3つずつに増えてしまいます。
登録時に被りチェックはしていないのはマズかったです。。。

修正

修正は非常に簡単です。
モデルバリデーションのルールを使って、被りチェックを行います。

使用するバリデーションのルールは、「isUnique」です。
これは、既存データとの比較を行い、被りデータの場合にエラーを返すという優れものです。

修正した CakePHP のコードは以下になります。

[ Model / User.php ]
public $validate = array(
	'username' => array(
		'notempty' => array(
			'rule' => array('notempty'),
		),
		'unique' => array(
			'rule' => array('isUnique'),
			'message' => 'そのアドレスでは登録できません。'
		)
	),
	'password' => array(
		'notempty' => array(
			'rule' => array('notempty'),
		),
	),
	'name' => array(
		'notempty' => array(
			'rule' => array('notempty'),
		),
	),
);
[ 6行目〜9行目 被りチェックのためのルール設定 ]
'unique' => array(
	'rule' => array('isUnique'),
	'message' => 'そのアドレスでは登録できません。'
)

このコードを追加するだけです。
既存データと入力データを比較して、被りをチェックします。被りデータである場合はエラーとし、「message」の文字列が表示されます。
今回の変更はこれだけです。

結果は以下のようになります。

cake_osreg_correct_after

まとめ

過去記事の「モデル」でも同じようなことを説明していました。うっかりってヤツですね。

この他にもメールアドレスであるかをチェックするためのルール(email)というものもありますが、今回はサンプルなので無しとします。
本来ユーザー登録では、そのメールアドレスが存在するかを確認するために、パラメータを付加したリンクを載せたメールを送信したり・・・という作業が必要です。これも今回はサンプルという理由で省略させています。

まだまだ修正点があると思いますが、徐々に直していけたらと。。。何か問題があればコメントください。。。

Share

  • このエントリーをはてなブックマークに追加

Comment

コメントを残す

*がついている欄は必須項目です。

  • Twitter
  • Facebook
  • Google Plus
  • RSS Feed