2012-07-26 42 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