как в ajaxForm и formit сделать проверку расширения файла?

MODX Revolution 2.7.3-pl

Создал сниппет 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"
Андрей
23 октября 2020, 21:59
modx.pro
771
0

Комментарии: 5

Денис Усманов
24 октября 2020, 23:10
0
Может не то, но всё же тут есть сниппет загрузки фото в профиль пользователя с определёнными форматами, может быть его функционал даст соображения как сделать валидацию в твоём случае.
    Андрей
    27 октября 2020, 16:51
    0
    спасибо за статью, попробую
    Александр Мельник
    25 октября 2020, 12:07
    0
    Возможно тут нужно понять, в какой момент происходит валидация данных.
    Может быть formit проводит все операции с валидацией до отправки формы, по крайней мере так должно быть логично. А если форма не отправлена, то наверное в массиве $_FILES ничего не будет?
    Попробую тот же скрипт (ну немного его переделав) вызвать не как валидатор, а как хук, указав его перед email
      Андрей
      27 октября 2020, 16:49
      0
      «Попробую тот же скрипт (ну немного его переделав) вызвать не как валидатор, а как хук, указав его перед email»

      поделитесь результатом или опечатка? )
        Александр Мельник
        27 октября 2020, 20:35
        0
        я опечатался, а сайт не дает править комментарий если прошло какое-то время.
        Но думаю у вас получится, я делал валидацию для файла ранее и именно как хук, а не как валидатор.
        По идее если вы хотите работать с валидатором то тоже можно, но вам нужно получать в сниппете upload как простую строку, в которой регулярным выражением находить расширение файла.
      Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
      5