2015-02-09 7 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

कैसे मैं एक संदेश सेट हो जाएगा देखते हैं? "तुलना करें" का उपयोग करके "पासवर्ड अमान्य" – TMoraes

+0

ठीक है, बस 'संदेश' => 'पासवर्ड अमान्य' .. लेकिन मुझे पता चलेगा, मैं यह संदेश कैसे पुष्टि करूं पुष्टि_password फ़ील्ड? 'क्योंकि यह पासवर्ड पासवर्ड दिखाता है .. – TMoraes

+1

@ThiagoMoraes बस 'confirm_password' फ़ील्ड के लिए एक ही नियम जोड़ें, और 'पासवर्ड' से तुलना करें। – ndm

2

अब संस्करण 3.2 या पिसाई यंत्र के लिए, सत्यापनकर्ता कक्षा में एक विधि कॉल sameAs है।

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

API