2013-01-08 10 views
9

के आधार पर केकेपीएचपी प्रमाणीकरण मुझे आश्चर्य है कि केकपीएचपी सत्यापन नियमों के साथ किसी अन्य के आधार पर फ़ील्ड को सत्यापित करने के लिए यह संभव है।अन्य क्षेत्र

मैं documentation about custom validation rules पढ़ रहा हूं लेकिन $check पैरा में केवल सत्यापित करने के लिए वर्तमान फ़ील्ड का मान शामिल है।

उदाहरण के लिए

। मैं रूप verify_password क्षेत्र परिभाषित करना चाहते हैं के लिए आवश्यककेवल अगर new_password फ़ील्ड रिक्त नहीं है। (मामले में

मैं इसे जावास्क्रिप्ट के साथ वैसे भी कर सकता है, लेकिन मैं आश्चर्य है कि अगर यह CakePHP के साथ सीधे यह करने के लिए संभव है।

उत्तर

13

आप एक मॉडल पर डेटा को मान्य करते हैं, तो डेटा पहले से ही set() है। यह है कि आप का मतलब इसे मॉडल की $data संपत्ति पर एक्सेस कर सकते हैं। नीचे दिया गया उदाहरण उस फ़ील्ड को चेक करता है जिसे हम मान्य कर रहे हैं यह सुनिश्चित करने के लिए कि यह सत्यापन नियमों (जैसे पासवर्ड पुष्टिकरण फ़ील्ड) में परिभाषित कुछ अन्य फ़ील्ड जैसा है।

सत्यापन नियम इस तरह कुछ दिखेंगे:

var $validate = array(
    'password' => array(   
     'minLength' => array(
      'rule' => array('minLength', 6), 
      'message' => 'Your password must be at least 6 characters long.' 
     ), 
     'notempty' => array(
      'rule' => 'notEmpty', 
      'message' => 'Please fill in the required field.' 
     ) 
    ), 
    'confirm_password' => array(
     'identical' => array(
      'rule' => array('identicalFieldValues', 'password'), 
      'message' => 'Password confirmation does not match password.' 
     ) 
    ) 
); 

हमारा सत्यापन फ़ंक्शन पास किए गए फ़ील्ड के डेटा (confirm_password) को देखता है और उस नियम के अनुसार इसकी तुलना करता है जिसे हमने नियम में परिभाषित किया है ($compareFiled को पारित किया गया है)।

function identicalFieldValues(&$data, $compareField) { 
    // $data array is passed using the form field name as the key 
    // so let's just get the field name to compare 
    $value = array_values($data); 
    $comparewithvalue = $value[0]; 
    return ($this->data[$this->name][$compareField] == $comparewithvalue); 
} 

यह एक सरल उदाहरण है, लेकिन आप कुछ भी आप $this->data साथ चाहते हो सकता है। विवरण के लिए

var $validate = array(
    'verify_password' => array(
    'rule' => array('requireNotEmpty', 'password') 
) 
); 
+0

धन्यवाद :) – Alvaro

+0

आशा है कि यह कुछ सामान अप को मंजूरी दे दी:

अपनी पोस्ट में उदाहरण कुछ इस तरह दिख सकता है:

function requireNotEmpty(&$data, $shouldNotBeEmpty) { return !empty($this->data[$this->name][$shouldNotBeEmpty]); } 

और नियम! – jeremyharris

+1

केकपीएचपी 2.4 में ऐसा लगता है कि आप फ़ंक्शन के संदर्भ में पास नहीं कर सकते हैं, ऐसा लगता है कि यह मेरे लिए काम नहीं कर रहा था, लेकिन दस्तावेज़ों में उदाहरण का उपयोग करके और इसे $ चेक में बदलने के लिए काम कर रहा था। – mtpultz

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