isUniqueが効きません!!!cakephp2.6.4でのバリデーション
受付中
回答 5
投稿
- 評価
- クリップ 0
- VIEW 3,696
現在僕は何度もisUniqueがちゃんと聞く方法はないか調べています。
新規のユーザー登録でバリデーションをつかっているのですが、alphaNumericとbetweenは効くくせに
isUniqueはびくともしません。いろいろ試しましたが効きません。憎いです。
現在のAdminUser.phpとAppModel.phpはこんな感じになってます。
どなたか本当にご助言をお願いします。
AdminUser.php
<?php
App::uses('AuthComponent', 'Controller/Component');
class AdminUser extends AppModel {
var $name = 'AdminUser';
var $validate = array(
'username' => array(
'unique' => array(
'rule' => array('isUnique'),
'message' => '既に使用されている名前です'
),
'alphaNumeric' => array(
'rule' => array('alphaNumeric'),
'message' => '名前は半角英数字にしてください'
),
'between2and32' => array(
'rule' => array('between', 2, 32),
'message' => '名前は2文字以上32文字以内にしてください'
)
),
'password' => array(
'between2and32' => array(
'rule' => array('between', 8, 32),
'message' => 'パスワードは8文字以上32文字以内にしてください'
)
)
);
//パスワードをハッシュ化して保存するために下記を追加
public function beforeSave($options = array()) {
$this->data['AdminUser']['password'] = AuthComponent::password($this->data['AdminUser']['password']);
return true;
}
}
AppModel.php
<?php
/**
* Application model for CakePHP.
*
* This file is application-wide model file. You can put all
* application-wide model-related methods here.
*
* CakePHP(tm) : Rapid Development Framework (http://cakephp.org)
* Copyright (c) Cake Software Foundation, Inc. (http://cakefoundation.org)
*
* Licensed under The MIT License
* For full copyright and license information, please see the LICENSE.txt
* Redistributions of files must retain the above copyright notice.
*
* @copyright Copyright (c) Cake Software Foundation, Inc. (http://cakefoundation.org)
* @link http://cakephp.org CakePHP(tm) Project
* @package app.Model
* @since CakePHP(tm) v 0.2.9
* @license http://www.opensource.org/licenses/mit-license.php MIT License
*/
App::uses('Model', 'Model');
/**
* Application model for Cake.
*
* Add your application-wide methods in the class below, your models
* will inherit them.
*
* @package app.Model
*/
class AppModel extends Model {
function __construct($id = false, $table = null, $ds = null) {
$cake_env = Configure::read('cake_env');
if (empty($cake_env)) {
$this->useDbConfig = 'default';
} else {
$this->useDbConfig = $cake_env;
}
parent::__construct($id, $table, $ds);
}
public function alphaNumeric($check) {
$value = array_values($check);
$value = $value[0];
return preg_match('/^[a-zA-Z0-9]+$/', $value);
}
}
-
気になる質問をクリップする
クリップした質問は、後からいつでもマイページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
クリップを取り消します
-
良い質問の評価を上げる
以下のような質問は評価を上げましょう
- 質問内容が明確
- 自分も答えを知りたい
- 質問者以外のユーザにも役立つ
評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。
質問の評価を上げたことを取り消します
-
評価を下げられる数の上限に達しました
評価を下げることができません
- 1日5回まで評価を下げられます
- 1日に1ユーザに対して2回まで評価を下げられます
質問の評価を下げる
teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。
- プログラミングに関係のない質問
- やってほしいことだけを記載した丸投げの質問
- 問題・課題が含まれていない質問
- 意図的に内容が抹消された質問
- 過去に投稿した質問と同じ内容の質問
- 広告と受け取られるような投稿
評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。
質問の評価を下げたことを取り消します
この機能は開放されていません
評価を下げる条件を満たしてません
質問の評価を下げる機能の利用条件
この機能を利用するためには、以下の事項を行う必要があります。
- 質問回答など一定の行動
-
メールアドレスの認証
メールアドレスの認証
-
質問評価に関するヘルプページの閲覧
質問評価に関するヘルプページの閲覧
+2
入力必須の場合はrequiredとallowEmptyを付けます。
'required'=>true,
'allowEmpty'=>false,
それと、各arrayにkey名は不要です。(有っても大丈夫だと思います)
var $validate = array(
'username' => array(
array(
'rule' => 'isUnique',
'required'=>true,
'allowEmpty'=>false,
'message' => '既に使用されている名前です'
),
array(
'rule' => 'alphaNumeric',
'message' => '名前は半角英数字にしてください'
),
array(
'rule' => array('between', 2, 32),
'message' => '名前は2文字以上32文字以内にしてください'
)
),
'password' => array(
array(
'rule' => array('between', 8, 32),
'required'=>true,
'allowEmpty'=>false,
'message' => 'パスワードは8文字以上32文字以内にしてください'
)
)
);
追記:
'rule'=>array('isUnique') は 'rule'=>'isUnique' にします。alphaNumericも。
投稿
-
回答の評価を上げる
以下のような回答は評価を上げましょう
- 正しい回答
- わかりやすい回答
- ためになる回答
評価が高い回答ほどページの上位に表示されます。
-
回答の評価を下げる
下記のような回答は推奨されていません。
- 間違っている回答
- 質問の回答になっていない投稿
- スパムや攻撃的な表現を用いた投稿
評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。
+1
'unique' => array(
'rule' => 'isUnique',
'message' => '既に使用されている名前です'
),
rule名を配列内にしないで、上記のようにするとどうなりますでしょうか。
これはパラメータを必要としないrule全般の話になります。
投稿
-
回答の評価を上げる
以下のような回答は評価を上げましょう
- 正しい回答
- わかりやすい回答
- ためになる回答
評価が高い回答ほどページの上位に表示されます。
-
回答の評価を下げる
下記のような回答は推奨されていません。
- 間違っている回答
- 質問の回答になっていない投稿
- スパムや攻撃的な表現を用いた投稿
評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。
+1
カラム名と違うとisUniqueは効かなかった記憶があります。
投稿
-
回答の評価を上げる
以下のような回答は評価を上げましょう
- 正しい回答
- わかりやすい回答
- ためになる回答
評価が高い回答ほどページの上位に表示されます。
-
回答の評価を下げる
下記のような回答は推奨されていません。
- 間違っている回答
- 質問の回答になっていない投稿
- スパムや攻撃的な表現を用いた投稿
評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。
+1
投稿
-
回答の評価を上げる
以下のような回答は評価を上げましょう
- 正しい回答
- わかりやすい回答
- ためになる回答
評価が高い回答ほどページの上位に表示されます。
-
回答の評価を下げる
下記のような回答は推奨されていません。
- 間違っている回答
- 質問の回答になっていない投稿
- スパムや攻撃的な表現を用いた投稿
評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。
0
アソシエーションでくっつけるため。
public $primaryKey = 'username';としていたせいで、
isUniqueがうまく作動しませんでした。
投稿
-
回答の評価を上げる
以下のような回答は評価を上げましょう
- 正しい回答
- わかりやすい回答
- ためになる回答
評価が高い回答ほどページの上位に表示されます。
-
回答の評価を下げる
下記のような回答は推奨されていません。
- 間違っている回答
- 質問の回答になっていない投稿
- スパムや攻撃的な表現を用いた投稿
評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。
15分調べてもわからないことは、teratailで質問しよう!
- ただいまの回答率 88.09%
- 質問をまとめることで、思考を整理して素早く解決
- テンプレート機能で、簡単に質問をまとめられる
2015/08/04 19:57 編集
2015/08/04 20:03
試してみましたが、また効いてくれませんでした。。。
2015/08/04 20:04
2015/08/04 20:27 編集
当方ではisUniqueを各所で使用して問題無く動作しています。
実際に使用しているコードにはnotEmptyルールが先に付いていました。
array(
'rule' => 'notEmpty',
'required' => true,
'allowEmpty' => false,
'message' => '名前を入力して下さい'
),
array(
'rule' => 'isUnique',
'message' => '既に使用されている名前です'
),
(ネスト表示の為全角ブランク使用していますのでコピペにはご注意ください。)