2010-10-22 12 views
5

मेरे पास एक कस्टम सत्यापन नियम है यह जांचने के लिए कि क्या दो पासवर्ड दर्ज किए गए हैं, और यदि वे नहीं हैं तो मैं "संदेश मेल नहीं खाता" कहता हूं।केकेपीपी कस्टम सत्यापन नियम संदेश

नियम काम करता है, हालांकि, जब पासवर्ड मेल नहीं खाता है तो यह सामान्य त्रुटि संदेश प्रदर्शित करता है, क्या हो रहा है?

var $validate=array(
     'passwd2' => array('rule' => 'alphanumeric', 
         'rule' => 'confirmPassword', 
         'required' => true, 
         'allowEmpty'=>false)); 

function confirmPassword($data) 
{ 
    $valid = false; 
    if (Security::hash(Configure::read('Security.salt') .$data['passwd2']) == $this->data['User']['passwd']) 
    { 
     $valid = true; 
     $this->invalidate('passwd2', 'Passwords do not match'); 
    } 
    return $valid; 
} 

इसे कहते हैं "यह क्षेत्र को खाली नहीं छोड़ा जा सकता"

संपादित करें:

अजीब बात यह है कि अगर मैं रिक्त पासवर्ड क्षेत्रों में से एक को छोड़, दोनों त्रुटि संदेश कहते हैं कि "यह फ़ील्ड नहीं कर सकते खाली छोड़ा जा "

हालांकि, अगर मैं दोनों में कुछ शब्दों में कहें, तो इसे सही ढंग से कहते हैं," पासवर्ड मेल नहीं खाते "

उत्तर

6

मुझे लगता है कि आप भी इसे जटिल बना दिया।

// In the model 
    public $validate = array(
     'password' => array(
      'minLength' => array(
       'rule' => array('minLength', '8') 
      ), 
      'notEmpty' => array(
       'rule' => 'notEmpty', 
       'required' => true 
      ) 
     ), 
     'confirm_password' => array(
      'minLength' => array(
       'rule' => array('minLength', '8'), 
       'required' => true 
      ), 
      'notEmpty' => array(
       'rule' => 'notEmpty' 
      ), 
      'comparePasswords' => array(
       'rule' => 'comparePasswords' // Protected function below 
      ), 
     ) 
    ); 
    protected function comparePasswords($field = null){ 
     return (Security::hash($field['confirm_password'], null, true) === $this->data['User']['password']); 
    } 

// In the view 
echo $form->input('confirm_password', array(
    'label' => __('Password', true), 
    'type' => 'password', 
    'error' => array(
     'comparePasswords' => __('Typed passwords did not match.', true), 
     'minLength' => __('The password should be at least 8 characters long.', true), 
     'notEmpty' => __('The password must not be empty.', true) 
    ) 
)); 
echo $form->input('password', array(
    'label' => __('Repeat Password', true) 
)); 
+0

ओह मैं तुम्हें प्रपत्र सहायक में एक विकल्प के रूप त्रुटि संदेश निर्दिष्ट कर सकते हैं पता नहीं था, जो चीजों को बहुत सरल बनाता है! –

+0

यह कुकबुक में है - http://book.cakephp.org/view/1401/options-error। ध्यान दें कि 'confirm_password' और 'पासवर्ड' फ़ील्ड के लिए लेबल स्विच किए गए हैं। – bancer

3

आप 'संदेश' कुंजी आपके $ va में उपयोग करना चाहिए lidate सरणी संदेश निर्दिष्ट करने के लिए:

'message' => 'Your passwords do not match' 

अतिरिक्त पठन: http://book.cakephp.org/view/1143/Data-Validation

0

और फिर आप $ this-> modelName-> invalidFields() है, जो आपको फ़ील्ड सत्यापन पूर्ण नहीं किया वापस आ जाएगी और द्वारा फ़ील्ड और संदेश पहुंच सकता है: यहाँ कैसे मैं यह कर रहा है संदेश यह है कि आप उनके लिए setted है ...

नियंत्रक मेरा मतलब है ...

http://book.cakephp.org/view/1182/Validating-Data-from-the-Controller

संबंधित मुद्दे