Я пытаюсь проверить загрузку файла, как показано ниже, используя специальное правило проверки, но не работает.пользовательское правило валидации для загрузки файла 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-файлы, проверка не работает вообще, вместо этого я возвращаюсь обратно форма без данных и с предупреждением о том, что все поля отсутствуют.
Это очень странно, мне отчаянно нужна помощь.
Включите отладчик и сообщите нам, что возвращает 'JFile :: getExt ($ filename)'? Я предполагаю, что что-то в пути (то есть '$ filename',' $ file' или '$ fileInput') не то, что вы ожидаете. –
какой отладчик вы имеете в виду? Консоль отладки Joomla находится на – raaman
Что вы получаете с помощью 'var_dump (JFile :: getExt ($ filename));'? Кроме того, измените '! =' На '! ==' – Lodder