Я хочу надати відповідь тут, оскільки я теж зіткнувся з тим же питанням - ми хочемо, щоб елемент $ _FILES був доступний у складі тієї ж публікації, що і інша форма. Моя відповідь заснована на @mrtnmgs, однак зазначає коментарі, додані до цього питання.
По-перше: Dropzone розміщує свої дані через ajax
Тільки тому, що ви використовуєте цю formData.append
опцію, все ще означає, що ви повинні вирішувати дії UX - тобто це все відбувається за кадром, і це не типовий пост форми. Дані розміщуються до вашого url
параметра.
По-друге: якщо ви хочете наслідувати публікацію форми, вам потрібно буде зберігати розміщені дані
Для цього потрібен код на стороні сервера для зберігання вашого $_POST
або $_FILES
в сеансі, який доступний користувачеві під час завантаження іншої сторінки, оскільки користувач не буде переходити на сторінку, де надходять опубліковані дані.
По-третє: потрібно перенаправити користувача на сторінку, на якій ці дані діють
Тепер ви опублікували свої дані, зберегли їх у сеансі, вам потрібно відобразити / діяти для користувача на додатковій сторінці. Вам також потрібно надіслати користувача на цю сторінку.
Отож для мого прикладу:
[Код Dropzone: Використовує Jquery]
$('#dropArea').dropzone({
url: base_url+'admin/saveProject',
maxFiles: 1,
uploadMultiple: false,
autoProcessQueue:false,
addRemoveLinks: true,
init: function(){
dzClosure = this;
$('#projectActionBtn').on('click',function(e) {
dzClosure.processQueue(); /* My button isn't a submit */
});
// My project only has 1 file hence not sendingmultiple
dzClosure.on('sending', function(data, xhr, formData) {
$('#add_user input[type="text"],#add_user textarea').each(function(){
formData.append($(this).attr('name'),$(this).val());
})
});
dzClosure.on('complete',function(){
window.location.href = base_url+'admin/saveProject';
})
},
});