我有同樣的問題。我建立了一個聯繫表格,允許用戶同時上傳頭像和編輯其他信息。表單驗證錯誤分別顯示在每個字段中。我無法承受文件輸入和其他文件輸入的不同顯示方案 - 我有一個標準的方法來處理顯示錯誤。
我使用了控制器定義的屬性和回調驗證函數來合併任何上傳錯誤和表單驗證。
這裏是我的代碼的摘錄:
# 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;
}
注:因爲如果在其他表單字段的任何錯誤,在上傳成功的文件輸入不會重新填充,我存儲和更新它之前的任何其他驗證發生 - 所以用戶不需要重新選擇文件。如果發生這種情況,我的通知會有點不同。
我通常首先驗證表單,如果一切正常,我開始檢查文件上傳的有效性。 – janosrusiczki 2011-03-03 06:59:56