2014-09-01 23 views
2

我想驗證文件上傳如下使用自定義驗證規則,但它不工作。joomla文件上傳的自定義驗證規則

class JFormRuleResume extends JFormRule 
{ 
    public function test(&$element, $value, $group = null, &$input = null, &$form = null) 
    { 
    jimport('joomla.filesystem.file'); 
    jimport('joomla.filesystem.folder'); 
    $jinput = JFactory::getApplication()->input; 
    $fileInput = new JInput($_FILES); 
    $file = $fileInput->get('jform', null, 'files', 'array'); 
    //$files = $jinput->files->get('jform'); 
    //$file = $files['resume']; 

    $filename = JFile::makeSafe($file['name']['resume']); 
    $filesize = $file['size']; 

    if (strtolower(JFile::getExt($filename))!='pdf') { 
     $element->addAttribute('message', strtolower(JFile::getExt($filename))); 
     return false; 
    } 
    if($filesize<2000000){ 
     $element->addAttribute('message', "File size bigger than 2MB"); 
     return false; 
    } 
    //var_dump($files); 
    return true; 

    } 
} 

無論我是否上傳pdf文件或其他擴展名不同的文件,都會返回錯誤「Invalid file type」。

請指教我是什麼問題?

我場是這樣的:

<field 
     name="resume" 
     type="file"    
     label="Resume" 
     description="" 
     size="40" 
     accept="application/pdf" 
     validate="resume" 
     required="true" 
    /> 

UPDATE

這是更新一下我到目前爲止發現的。發佈數據

$requestData = JRequest::getVar('jform', null, 'post', 'array'); 

不提取文件輸入值。因此,我必須在控制器動作中添加以下代碼,然後驗證表單$ data = $ model-> validate($ form,$ requestData);

$requestData = JRequest::getVar('jform', null, 'post', 'array'); 
    // Get the file data array from the request. 
    $jinput = JFactory::getApplication()->input; 
    $fileInput = new JInput($_FILES); 
    $file = $fileInput->get('jform', null, 'files', 'array'); 

    // Make the file name safe. 
    $filename = JFile::makeSafe($file['name']['resume']); 
    $requestData['resume'] = strtolower($filename); 
    JRequest::setVar('jform', $requestData); 

    $form = $model->getForm(); 

    if (!$form) { 
     JError::raiseError(500, $model->getError()); 
     return false; 
    } 

    $data = $model->validate($form, $requestData); 

這樣我就可以將文件輸入值注入到數組中。但問題仍然存在,因爲上面的驗證只是部分的。驗證工作只適用於docx,png,htm,php,txt ....等文件,如果我提交doc,pdf(大於2MB),zip文件驗證根本不起作用,而是顯示回沒有數據的形式和驗證警告,所有的領域都缺失。

這很奇怪,我非常需要一些幫助。

+0

打開你的調試器並告訴我們'JFile :: getExt($ filename)'返回什麼?我的猜測是,路上的東西(即'$ filename','$ file'或'$ fileInput')不是你所期望的。 – 2014-09-01 19:20:22

+0

你是哪個調試器的意思? Joomla調試控制檯是在 – raaman 2014-09-01 19:59:13

+0

你用var_dump(JFile :: getExt($ filename))得到了什麼;'?另外,將'!='更改爲'!==' – Lodder 2014-09-01 20:01:19

回答

0

最後通過用更大尺寸的文件上傳時重新顯示的表單的問題做成。這是一個服務器的問題,不得不改變我的WAMP服務器

upload_max_filesize = 100M 
post_max_size = 100M 

的php.ini中關於文件上傳值的第二個問題,以下內容並沒有被後是一個新的東西給我,我也沒知道。必須先單獨上傳文件,然後獲取文件的保存名稱,然後使用該名稱插入數據庫。