2011-03-03 18 views
8

मैं सोच रहा था कि कोडइग्निटर 2.0 में फॉर्म सत्यापन वर्ग के साथ फ़ाइल के आकार को सत्यापित करने का कोई तरीका है या नहीं। मैं एक रूप है कि एक फ़ाइल इनपुट शामिल है और मैं इस तरह कुछ करना चाहता हूँ:कोडइग्निटर - फॉर्म प्रमाणीकरण और फ़ाइल अपलोड डेटा

$this->form_validation->set_rule('file', 'File', 
       'file_type[image/jpeg|image/gif|image/png]|file_max_size[500]'); 

मैं अपलोड वर्ग के साथ संयोजित और अपलोड डेटा के आधार पर मान्य करने के लिए मान्यता वर्ग का विस्तार के बारे में सोचा है, लेकिन यह हो सकता है समय लेने वाला हो।

क्या किसी को फॉर्म सत्यापन वर्ग के लिए किसी भी एक्सटेंशन के बारे में पता है जो ऐसा कुछ करेगा?

+2

मैं आम तौर पर फ़ॉर्म को सत्यापित करके ऐसा करता हूं और यदि सब ठीक है तो मैं फ़ाइल अपलोड की वैधता की जांच करना शुरू करता हूं। – janosrusiczki

उत्तर

10

फाइल अपलोड कक्षा वास्तव में सत्यापन नियमों के अपने स्वयं के सेट है तुम इतनी

$config['upload_path'] = './uploads/'; 
$config['allowed_types'] = 'gif|jpg|png'; 
$config['max_size'] = '100'; 
$config['max_width'] = '1024'; 
$config['max_height'] = '768'; 

$this->load->library('upload', $config); 

(taken from CI docs)

+0

अगर फ़ाइल सत्यापन कॉन्फ़िगरेशन में फिट नहीं है तो फॉर्म सत्यापन त्रुटियों को अपडेट किया जाएगा? उदाहरण के लिए, यदि फ़ाइल बहुत बड़ी है, तो क्या सत्यापन_errors() फ़ंक्शन एक त्रुटि संदेश लाएगा? – ShoeLace1291

+1

नहीं, आपको फ़ाइल अपलोड त्रुटियों को अलग से इलाज करना होगा, इसलिए पहले मैं इनपुट फ़ील्ड सत्यापन की जांच करूंगा, फिर 'do_upload()' और विशेष रूप से अपलोड सत्यापन त्रुटियों को प्रदर्शित करने के लिए एक फ़ंक्शन है। यह सब मेरे दस्तावेज में लिंक है जो मैं अपने उत्तर में लिंक करता हूं। – jondavidjohn

+2

यदि आप अपलोड फ़ील्ड को सत्यापन में जोड़ते हैं, लेकिन इसे कोई सत्यापन नियम न दें ('$ this-> form_validation-> set_rules ('file_to_upload', 'फ़ाइल अपलोड करने के लिए', ''); '), तो आप कर सकते हैं अपलोड त्रुटि संदेश को form_validation ऑब्जेक्ट में डालें और यह स्वचालित रूप से स्वचालित रूप से प्रदर्शित होगा ('$ this-> form_validation -> _ field_data ['file_to_upload'] ['error'] = $ this-> upload-> display_errors ('', ''); ')। '

'रैपर को सामान्य रूप से 'display_errors()' द्वारा जोड़े जाने वाले रैपर को हटाने के लिए '$ this-> upload-> display_errors() के अंदर एकल उद्धरण आवश्यक हैं। –

9

मैं एक ही समस्या थी की तरह सेट कर सकते हैं। मैंने एक संपर्क फ़ॉर्म बनाया जो उपयोगकर्ता को एक अवतार अपलोड करने और एक ही समय में अन्य जानकारी संपादित करने की अनुमति देता है। प्रत्येक फ़ील्ड के लिए फॉर्म सत्यापन त्रुटियां अलग-अलग दिखाई देती हैं। मैं फ़ाइल इनपुट और अन्य लोगों के लिए एक अलग प्रदर्शन योजना बर्दाश्त नहीं कर सका - मेरे पास एक मानक विधि है जो त्रुटियों को प्रदर्शित करने का ख्याल रखती है।

मैंने फॉर्म सत्यापन के साथ किसी भी अपलोड त्रुटि को मर्ज करने के लिए नियंत्रक परिभाषित संपत्ति और कॉलबैक सत्यापन फ़ंक्शन का उपयोग किया।

# controller property 

private $custom_errors = array(); 

# form action controller method 

public function contact_save() 
{ 
    # file upload for contact avatar 

    $this->load->library('upload', array(
     'allowed_types'=>'gif|jpg|jpeg|png', 
     'max_size'=>'512' 
    )); 

    if(isset($_FILES['avatar']['size']) && $_FILES['avatar']['size']>0) 
    { 
     if($this->upload->do_upload('avatar')) 
     {   
      # avatar saving code here 

      # ... 
     } 
     else 
     { 
      # store any upload error for later retrieval 
      $this->custom_errors['avatar'] = $this->upload->display_errors('', ''); 
     } 
    } 

    $this->form_validation->set_rules(array(
     array(
      'field' => 'avatar', 
      'label' => 'avatar', 
      'rules' => 'callback_check_avatar_error' 
     ) 
     # other validations rules here 
    ); 

    # usual form validation here 

    if ($this->form_validation->run() == FALSE) 
    { 
     # display form with errors 
    } 
    else 
    { 
     # update and confirm 
    } 

} 

# the callback method that does the 'merge' 

public function check_avatar_error($str) 
{ 
    #unused $str 

    if(isset($this->custom_errors['avatar'])) 
    { 
     $this->form_validation->set_message('check_avatar_error', $this->custom_errors['avatar']); 
     return FALSE; 
    } 
    return TRUE; 
} 

नोट::

यहाँ मेरी कोड के एक उद्धरण है के रूप में फ़ाइल इनपुट अगर वहाँ अन्य प्रपत्र फ़ील्ड्स में किसी भी त्रुटि है, अपलोड सफलता पर फिर से आबाद नहीं होगा, मैं स्टोर और किसी भी करने से पहले इसे अद्यतन अन्य सत्यापन होता है - इसलिए उपयोगकर्ता को फ़ाइल को संशोधित करने की आवश्यकता नहीं होती है। यदि ऐसा होता है तो मेरी अधिसूचना थोड़ा अलग है।

+2

यह $ _FILES सरणी के साथ एक अच्छी चाल है। आपके दृष्टिकोण के विकल्प के रूप में मैंने फ़ाइलों को सरणी को सत्यापन कॉलबैक में स्थानांतरित कर दिया ताकि मैं अपने अन्य सत्यापनों के साथ चला सकूं। –

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