2012-07-26 45 views
0

我設置規則'isUnique'併爲'on'選項設置'create'值。CakePHP。不工作「on =>創建」

完整代碼:

'username' => array(
    'notempty' => array(
     'rule' => array('notempty'), 
     'message' => 'Empty field', 
     'required' => true, 
    ),    
    'between' => array(
     'rule' => array('between',3,25), 
     'message' => 'Too long value' 
    ), 
    'unique' => array(
     'rule' => 'isUnique', 
     'on' => 'create', 
     'message' => 'Already taken', 
     'required' => true, 
    ) 
) 

但是,當我試圖登錄,我收到錯誤消息。爲什麼?

CakePHP的2.2.1

+0

您是否獲得了錯誤,而不「開」? – 2012-07-26 12:45:49

+0

是@DavorLozic – Scofield 2012-07-26 12:49:02

+0

編輯你的問題,並在其中放置更多的代碼。把AppController,UsersController(或你的登錄和註冊的地方),模型和視圖。 :) – 2012-07-26 12:51:42

回答

0

的原因是因爲你有'required' => true集,這就需要重點驗證時在場。這與'on'密鑰衝突,如下所述:http://book.cakephp.org/2.0/en/models/data-validation.html#one-rule-per-field

而是僅在創建時才需要。

'unique' => array(
    'rule' => 'isUnique', 
    'on' => 'create', 
    'message' => 'Такой никнейм уже занят', 
    'required' => 'create', // change this to 'create' 
) 
+0

「必需」鍵使得FIELD成爲必需,「ON」鍵使RULE得到應用。所以他們是兩個不同的東西! – betatester07 2015-03-21 18:05:06

0

的問題是,當你試圖登錄,CakePHP中認爲,要創建一個新的記錄(CakePHP的標識爲新的記錄,因爲你喜歡你做的時候沒有提供該項目的ID你正在編輯一些項目)。

的解決方案是創建一個自定義的驗證功能,這將檢查唯一的用戶名登錄時,除了所有的時間。

+0

是啊,現在我實際上使用自定義函數來檢查這種字段 – Scofield 2015-03-21 20:30:07

+0

我剛剛面臨類似的問題,一直沒能找到一個很好的解決方案,所以經過一些研究,我發佈我的這裏 – betatester07 2015-03-21 21:36:39