joomla文件上传的自定义验证规则

时间:2014-09-01 19:16:42

标签: php joomla joomla2.5

我正在尝试使用自定义验证规则验证文件上传,但不起作用。

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文件还是其他扩展名不同的文件,错误&#34;文件类型无效&#34;退回。

请赐教我的问题是什么?

我的字段如下:

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

更新

这是我迄今为止所发现的内容的更新。发布数据

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

不提取文件输入值。因此,在我验证表单$ data = $ model-&gt; 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);

这样我就可以将文件输入值注入post数组。但问题仍然存在,因为上述验证仅部分起作用。验证仅适用于docx,png,htm,php,txt等文件。如果我提交doc,pdf(大于2MB),zip文件验证根本不起作用,而是显示回来没有数据的表单,以及缺少所有字段的验证警告。

这很奇怪,我迫切需要一些帮助。

1 个答案:

答案 0 :(得分:0)

最后通过上传更大尺寸的文件时重新显示表单的问题。这是一个服务器问题,不得不在我的wamp服务器的php.ini中更改以下内容

upload_max_filesize = 100M
post_max_size = 100M

关于文件上传值不在帖子中的第二个问题对我来说是一件新事,我不知道。必须先单独上传文件,然后获取保存文件的名称,然后使用该名称插入数据库。