2014-09-01 3 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 или другие файлы с разным расширением, возвращается ошибка «Недопустимый тип файла».

Пожалуйста, просветите меня, в чем проблема?

Мое поле выглядит следующим образом:

<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 (более 2 МБ), zip-файлы, проверка не работает вообще, вместо этого я возвращаюсь обратно форма без данных и с предупреждением о том, что все поля отсутствуют.

Это очень странно, мне отчаянно нужна помощь.

+0

Включите отладчик и сообщите нам, что возвращает 'JFile :: getExt ($ filename)'? Я предполагаю, что что-то в пути (то есть '$ filename',' $ file' или '$ fileInput') не то, что вы ожидаете. –

+0

какой отладчик вы имеете в виду? Консоль отладки Joomla находится на – raaman

+0

Что вы получаете с помощью 'var_dump (JFile :: getExt ($ filename));'? Кроме того, измените '! =' На '! ==' – Lodder

ответ

0

И наконец, проблема с отображением формы при загрузке файла большего размера. Это была проблема с сервером, должен был изменить следующее в php.ini моего WAMP сервера

upload_max_filesize = 100M 
post_max_size = 100M 

А что касается второго вопроса для значения загрузки файла не будучи в должности была новая вещь для меня, который я не сделал знать. Если бы сначала загрузить файл отдельно, а затем получить имя, по которому файл был сохранен, а затем использовать это имя для вставки в базу данных.

Смежные вопросы