как в ajaxForm и formit сделать проверку расширения файла?
MODX Revolution 2.7.3-pl
Создал сниппет formit2checkfile:
Не понимаю, где ещё что-то надо прописать?
upd.
c php у меня никак, т.ч. пришлось выкручиваться «html костылём»:
accept=".jpg,.jpeg,.png,.pdf"
Создал сниппет formit2checkfile:
<?php
// инициализируем переменную output, отвечающую за результат работы валидатора, со значением true
$output = true;
// разрешённые расширения файлов
$allowedExt = array('jpg','png','pdf');
// имя файла
$fileName = basename( $_FILES[$key]['name'] );
// расширение файла
$fileExt = mb_strtolower(pathinfo($fileName, PATHINFO_EXTENSION));
// если имя файла не пустое
if ($fileName != '') {
if(!in_array($fileExt, $allowedExt)) {
// файл имеет недопустимый тип
$errorMsg = 'Файл ' . $fileName . ' имеет не разрешённый тип.';
$validator->addError($key, $errorMsg);
$output = false; // возвращаем false
}
}
return $output;
В вызове формы прописал 'customValidators' => 'formit2checkfile', и 'validate' => 'upload:formit2checkfile',{'!ajaxForm'|snippet:[
'snippet'=>'FormIt',
'hooks' => 'spam,email',
'emailSubject' => 'Новое сообщение из формы обратной связи',
'customValidators' => 'formit2checkfile',
'validate' => 'email:email:required,work_phone:blank,upload:formit2checkfile',
'form' => 'tpl.form',
'emailTpl' => 'tpl.form2mail'
]}
При наличии всего этого форма отправляется с любым типом файла.Не понимаю, где ещё что-то надо прописать?
upd.
c php у меня никак, т.ч. пришлось выкручиваться «html костылём»:
accept=".jpg,.jpeg,.png,.pdf"
Комментарии: 5
Может не то, но всё же тут есть сниппет загрузки фото в профиль пользователя с определёнными форматами, может быть его функционал даст соображения как сделать валидацию в твоём случае.
спасибо за статью, попробую
Возможно тут нужно понять, в какой момент происходит валидация данных.
Может быть formit проводит все операции с валидацией до отправки формы, по крайней мере так должно быть логично. А если форма не отправлена, то наверное в массиве $_FILES ничего не будет?
Попробую тот же скрипт (ну немного его переделав) вызвать не как валидатор, а как хук, указав его перед email
Может быть formit проводит все операции с валидацией до отправки формы, по крайней мере так должно быть логично. А если форма не отправлена, то наверное в массиве $_FILES ничего не будет?
Попробую тот же скрипт (ну немного его переделав) вызвать не как валидатор, а как хук, указав его перед email
«Попробую тот же скрипт (ну немного его переделав) вызвать не как валидатор, а как хук, указав его перед email»
поделитесь результатом или опечатка? )
поделитесь результатом или опечатка? )
я опечатался, а сайт не дает править комментарий если прошло какое-то время.
Но думаю у вас получится, я делал валидацию для файла ранее и именно как хук, а не как валидатор.
По идее если вы хотите работать с валидатором то тоже можно, но вам нужно получать в сниппете upload как простую строку, в которой регулярным выражением находить расширение файла.
Но думаю у вас получится, я делал валидацию для файла ранее и именно как хук, а не как валидатор.
По идее если вы хотите работать с валидатором то тоже можно, но вам нужно получать в сниппете upload как простую строку, в которой регулярным выражением находить расширение файла.
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.