繁体   English   中英

自定义验证规则,用于上传joomla文件

[英]custom validation rule for joomla file upload

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

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文件还是其他具有不同扩展名的文件,都会返回错误“无效的文件类型”。

请赐教我什么问题?

我的领域看起来像这样:

<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);

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

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

最终解决了上传较大文件时重新显示表格的问题。 这是服务器问题,必须在我的Wamp服务器的php.ini中更改以下内容

upload_max_filesize = 100M
post_max_size = 100M

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM