我想驗證文件上傳如下使用自定義驗證規則,但它不工作。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文件驗證根本不起作用,而是顯示回沒有數據的形式和驗證警告,所有的領域都缺失。
這很奇怪,我非常需要一些幫助。
打開你的調試器並告訴我們'JFile :: getExt($ filename)'返回什麼?我的猜測是,路上的東西(即'$ filename','$ file'或'$ fileInput')不是你所期望的。 – 2014-09-01 19:20:22
你是哪個調試器的意思? Joomla調試控制檯是在 – raaman 2014-09-01 19:59:13
你用var_dump(JFile :: getExt($ filename))得到了什麼;'?另外,將'!='更改爲'!==' – Lodder 2014-09-01 20:01:19