diff --git a/Model/User.php b/Model/User.php index 37b2089..3d50c80 100644 --- a/Model/User.php +++ b/Model/User.php @@ -303,7 +303,7 @@ public function beforeValidate($options = array()) { */ protected function _setUsernameValidate() { //ログインID - if (! Hash::get($this->data, 'User.id')) { + if ($this->__isValidateUsernameRequired()) { $this->validate = ValidateMerge::merge($this->validate, array( 'username' => array( 'notBlank' => array( @@ -334,6 +334,34 @@ protected function _setUsernameValidate() { } } +/** + * ログインID(username)のバリデーションを行うかどうか + * + * @return bool + */ + private function __isValidateUsernameRequired() { + if (!Hash::get($this->data, 'User.id')) { + // 新規登録ならば、必ずバリデーションを行う + return true; + } + // 更新時 + if (!isset($this->data['User']['username'])) { + // ログインID(username)がPOSTされてなければバリデーション不要 + return false; + } + $beforeUser = $this->find('first', + [ + 'conditions' => [ + 'id' => $this->data['User']['id'] + ], + 'recursive' => -1, + 'fields' => ['username'] + ] + ); + // ログインID(username)が変更されてなければバリデーション不要。変更されてたらバリデーション必要 + return $beforeUser['User']['username'] !== $this->data['User']['username']; + } + /** * バリデーションのセット(パスワード) *