2015-02-09 116 views
7

我有两个领域的“密码”(此字段是在数据库中)和confirm_password(此字段是不是在数据库中)CakePHP的3 - 比较密码

好吧,我需要的,如果比较密码== confirm_password。 。但我不知道创建一个自定义验证“confirm_password”...需要在数据库中有这个字段?

我该怎么办?

回答

22

一般来说,你可以通过$context说法,在那里它存储在data关键,即$context['data']['confirm_password'],然后你可以比较当前的字段值访问一个custom validation rule的所有数据。

$validator->add('password', 'passwordsEqual', [ 
    'rule' => function ($value, $context) { 
     return 
      isset($context['data']['confirm_password']) && 
      $context['data']['confirm_password'] === $value; 
    } 
]); 

话虽这么说,最近一个compareWith验证规则被引入其中正是这么做的。

https://github.com/cakephp/cakephp/pull/5813

$validator->add('password', [ 
    'compare' => [ 
     'rule' => ['compareWith', 'confirm_password'] 
    ] 
]); 
+0

我将如何设置的消息? “Password Invalid”使用“compareWith” – TMoraes 2015-02-09 18:53:34

+0

好的,只是'message'=>'密码无效'..但是我想知道,我怎样才能使这个消息在下面显示confirm_password字段?'因为它显示了下面的密码字段.. – TMoraes 2015-02-10 00:39:33

+1

@ThiagoMoraes简单地为'confirm_password'字段添加相同的规则,并与'password'进行比较。 – ndm 2015-02-10 04:12:26

2

现在有在验证类中的方法调用sameAs的,3.2版本或刨丝器。

$validator -> sameAs('password_match','password','Passwords not equal.'); 

看到API