KerryDarko
@KerryDarko

Что сделать, чтобы пользователь не загружал повторно файл, если форма не прошла валидацию по другому полю?

Я не прошу выложить мне чистое решение, только подтверждение, так или не так я думаю.

Есть форма: пара полей и поле для файла.
Если форма не прошла валидацию по какому-то полю (не по файлу), то при отображении этой формы с ошибками этот файл должен отображаться как уже загруженный, который, конечно, при желании можно заменить на другой.

В Симфони есть фишка, которая может сделать это за тебя? Или уже готовый бандл?
Если нет, то это делает просто загрузкой файла независимо от валидации? Меня напрягает, что если пользователь в этом случае просто плюнет и закроет страницу, то так начнут скапливаться загруженные ненужные картинки.
  • Вопрос задан
  • 249 просмотров
Пригласить эксперта
Ответы на вопрос 3
Я как-то сделал, что загрузка картинки идет аяксом после того, как прошла клиентская и серверная валидация полей. Из очевидных минусов - труднее в управлении, зато нет необходимости удалять картинки.

Можно сделать так, чтобы загружалось в любом случае (в папку temp), после серверной валидации перемещать картинку из temp в папку назначения, а саму папку temp раз в день чистить кроном.
Ответ написан
pro100ShCoder
@pro100ShCoder
программист
Если подойдет такой вариант - валидация на js. Если важно проверять на сервере - отправлять аяксом данные, если ок делаем загрузку формы.

Так же можно использовать File API, для валидации файла на стороне клиента и/или аяксом отправить форму с файлами и уже проверить на стороне сервера - FormData
примеры чтения файлов на стороне клиента
Ответ написан
Комментировать
ThunderCat
@ThunderCat
{PHP, MySql, HTML, JS, CSS} developer
Сессия, другие варианты мне кажется излишне сложные.
При отправке формы загружаем картинку, запоминаем в сессию путь, если картинки нет - шарим в сессии - есть картинка? - хорошо, нету - тоже не страшно, проверяем данные, если неверно - возвращаемся на форму, проверяем или есть урл картинки в сессии, показываем если есть.
PROFIT.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы