2009-01-22 12 views
14

मैं कोडइग्निटर का उपयोग करके अपना फॉर्म सत्यापन वर्ग लिख रहा हूं। क्या कोई तरीका है ताकि मैं नाम मूल्य जोड़ी में त्रुटि संदेश प्राप्त कर सकूं? उदाहरण के लिए, नमूना रूप में चार फ़ील्ड होते हैं: user_name, password, password_conf, और timezone। उनमें से user_name और password मान्यता को क्रियान्वित करने के बाद नाकाम रही है निम्नलिखित:कोडइग्निटर फॉर्म प्रमाणीकरण - परिणाम "स्ट्रिंग" के बजाय "सरणी" के रूप में प्राप्त करें

Array 
{ 
    'user_name' => 'user name is required', 
    'password' => 'passord is required' 
} 

मैं सच:

$result = $this->form_validation->run(); 

ऊपर समारोह झूठी देता है, तो मैं निम्नलिखित की तरह नाम मूल्य जोड़े में त्रुटियों प्राप्त करना चाहते हैं एक JSON बनाना चाहते हैं, जिसे मैं AJAX कॉल पर वापस भेज सकता हूं। मैं एक (गंदा) समाधान है: मैं निम्नलिखित की तरह एक के बाद सत्यापन के तरीकों एक कॉल कर सकते हैं:

$this->form_validation->required($user_name); 
$this->form_validation->required($password); 

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

संपादित: मैं जवाब में से एक से jQuery के साथ सत्यापन करने के लिए सुझाव दिया गया था:

jQuery ग्राहक साइड सत्यापन करने में मदद मिलेगी, लेकिन क्या सर्वर साइड के बारे में, वहाँ मैं CodeIgniter सत्यापन का उपयोग कर रहा हूँ।

मैं यह है कि इस तरह डिजाइन किया गया है:

  1. मैं AJAX का उपयोग कर सभी मूल्यों पोस्ट।
  2. सर्वर पक्ष (PHP) में मान्य करें।
  3. इनपुट वैध होने पर वांछित ऑपरेशन करें; अन्यथा उपयोगकर्ता को त्रुटि लौटाएं। कोड आग लगनेवाला मान्यता के रूप में

उत्तर

16

मैं CodeIgniter कोड में देख कर एक तरह से अपने आप को मिल गया है: मैं जैसे पुस्तकालय CI_Form_validation विस्तार किया है: -

class MY_Form_validation extends CI_Form_validation 
{ 
    public function getErrorsArray() 
    { 
     return $this->_error_array; 
    } 
} 

मुझे पता है, यह एक हैक है, लेकिन समय के लिए मेरी जरूरत में काम करेगा । मुझे आशा है कि CodeIginter टीम जल्द ही उस सरणी तक पहुंचने के लिए एक इंटरफेस के साथ आएगी।

+2

यह एक हैक बिल्कुल नहीं है की जरूरत है, कि क्या OOP सब के बारे में है। मैं एक ही सड़क पर चल रहा हूं, और यह मेरा अंत खेल है क्योंकि मुझे कोई अन्य विकल्प नहीं दिख रहा है। – thenetimp

+4

यह निश्चित रूप से एक अच्छा समाधान है। इस कार्यक्षमता को मूल रूप से न रखने के लिए कोडनिर्देशक पर शर्म आती है! –

+0

हालांकि यह एक मूल्य वापस नहीं करता है। कोई विचार क्यों? जब मैं $ इस सूचक को डंप करता हूं, तो मुझे लगता है कि _error_array संरक्षित है। सरणी हमेशा खाली आती है। –

1

देखकर आप एक सामान्य पृष्ठ ताज़ा करने पर त्रुटि संदेश देता है यह jquery validation plugin जो फार्म भेजने से पहले पूरी तरह से ग्राहक के पक्ष को मान्य होगा की तरह कुछ का उपयोग करने के लिए बेहतर नहीं होगा? कोई AJAX इस तरह से जरूरी नहीं है।

संपादित करें: मैं सर्वर साइड सत्यापन नहीं करने का सुझाव नहीं दे रहा हूं, केवल सत्यापित करने के लिए AJAX के साथ पोस्ट करना जरूरी नहीं है और यदि आप इसे क्लाइंट साइड करते हैं तो सर्वर हिट को कम कर देगा। यह नियमित रूप से त्रुटियों या सफलता संदेश के साथ नियमित पृष्ठ रीफ्रेश पर अपमानित हो जाएगा।

+3

क्लाइंट साइड सत्यापन अपने ही चिंता का विषय नहीं होना चाहिए, बैकएंड सत्यापन और अधिक महत्वपूर्ण है। –

+0

ठीक है कि बेवकूफ होगा। मैंने सर्वर साइड सत्यापन नहीं करने का सुझाव नहीं दिया - मेरे संपादन और मूल पोस्ट को दोबारा पढ़ें। – roborourke

+0

इसके अलावा, कभी कभी मान्यता बैकएंड किया जाना है, उदाहरण के लिए (किसी तालिका में Unicity) एक डेटाबेस तालिका के खिलाफ कुछ को मान्य करने के लिए – MaxiWheat

1

समाधान मैं सबसे ज्यादा पसंद कहीं भी मान्यता पुस्तकालय एक समारोह जोड़ने या विस्तार को शामिल नहीं करता:

$validator =& _get_validation_object(); 
$error_messages = $validator->_error_array; 

संदर्भ: http://thesimplesynthesis.com/post/how-to-get-form-validation-errors-as-an-array-in-codeigniter/

अपने कोड के किसी भी बिंदु पर यह कॉल करने के लिए सक्षम होना चाहिए ।साथ ही, यह ध्यान देने योग्य है कि newer thread है जो इस पर भी चर्चा करता है।

+0

'$ यह-> form_validation-> error_array();' पहले से ही लाइब्रेरी में है। इसका इस्तेमाल क्यों नहीं करें? – masterFly

1

आप अपने नियंत्रक

private function return_form_validation_error($input) 
{ 
    $output = array(); 
    foreach ($input as $key => $value) 
    { 
     $output[$key] = form_error($key); 
    } 
    return $output; 
} 

और फिर अपने सत्यापन विधि में, बस इस फोन में एक निजी समारोह बना सकते हैं, यहाँ मेरा

public function add_cat_form() 
 
    { 
 
     $this->output->unset_template(); 
 
     $this->load->library('form_validation'); 
 
     $this->form_validation->set_rules('name', 'Name', 'required'); 
 
     if ($this->form_validation->run()) 
 
     { 
 
      if (IS_AJAX) 
 
      { 
 
       $dataForInsert = $this->input->post(); 
 
       if ($dataForInsert['parentid'] == -1) 
 
       { 
 
        unset($dataForInsert['parentid']); 
 
       } 
 
       $this->post_model->add_cat($dataForInsert); 
 
       echo json_encode('success'); 
 
      } else 
 
      { 
 
       #in case of not using AJAX, the AJAX const defined 
 
      } 
 
     } else 
 
     { 
 
      if (IS_AJAX) 
 
      { 
 
       #This will be return form_validation error in an array 
 
       $output = $this->return_form_validation_error($this->input->post()); 
 
       echo $output = json_encode($output); 
 
      } else 
 
      { 
 
       #in case of not using AJAX, the AJAX const defined 
 
      } 
 
     } 
 
    }

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