#laravel #vue.js #validation #vuejs2 #laravel-8
#ларавель #vue.js #утверждение #vuejs2 #ларавель-8
Вопрос:
Это мой код, я использую vuejs и laravel. Функция, которую я выполняю, заключается как в сохранении курса, так и в импорте файла Excel для получения данных в файле. Но при сохранении курса все нормально, но когда дело доходит до запуска строки файла validate excel, ошибка не появляется. Даже несмотря на то, что я дал ему имя и консоль.вышел лог. Вы можете помочь мне это исправить? Огромное спасибо.
Компонент — тег шаблона
lt;form @submit.prevent="store()" @keydown="form.onKeydown($event)"gt; lt;div class="form-group"gt; lt;label class="form-label"gt;Courseslt;/labelgt; lt;select class="form-control" name="education_program_course" v-model="form.education_program_course"gt; lt;option value="" disabled selected=""gt;Select optionlt;/optiongt; lt;option value="" disabledgt;-------lt;/optiongt; lt;option v-for="course in courses" :key="course.course_code" :value="course.course_code"gt;{{ course.course_name }}lt;/optiongt; lt;/selectgt; lt;/divgt; lt;div class="form-group"gt; lt;label class="form-label"gt;Excel Filelt;/labelgt; lt;input type="file" class="form-control" id="file_data" name="file_data" ref="fileupload" @change="onFileChange"gt; lt;/divgt; lt;div class="card-footer text-right"gt; lt;button :disabled="form.busy" class="btn btn-success btn-lg mt-1" type="submit"gt;Savelt;/buttongt; lt;/divgt; lt;/formgt;
Компонент — тег скрипта
export default: { data() { return { file_data: "", form: new Form({ education_program_course }), }, methods: { onFileChange(e) { this.file_data = e.target.files[0]; }, store() { this.form.busy = true; let formData = new FormData(); formData.append('file_data', this.file_data); this.form.post('../../api/admin/program/education', formData, { headers: { 'content-type': 'multipart/form-data' } }) .then(res =gt; { if(this.form.successful){ this.$snotify.success('Sucessful!'); this.form.clear(); this.form.reset(); } }) .catch(err =gt; { this.$snotify.error(err.response.data.errors.file_data[0]); }); }, } } }
Контроллер
$data = $request-gt;validate([ 'education_program_course' =gt; ['required'], 'file_data' =gt; ['required', 'file', 'mimes:xls,xlsx'] ]); $program = new EducationProgram(); $program-gt;education_program_course = $data['education_program_course']; $path = $request-gt;file($data['file_data'])-gt;getRealPath(); Excel::import(new ProgramDetailImport, $path);
Комментарии:
1. @guyg я просто отправляю данные file_data в FormData, потому что курс education_program_course уже доступен в этой форме.
Ответ №1:
Вы должны добавить «образование_программ_курс» в свои данные формы.
formData.append('education_program_course', this.form.education_program_course);
Комментарии:
1. я думаю, что курс education_program_course уже доступен в этой форме.
2. проверьте ошибку проверки с помощью сетевой консоли браузера
3. Я проверил, и там написано, что требуется ошибка проверки. Но когда я проверяю
console.log(this.file_data)
, он все равно показывает данные этого файла.
Ответ №2:
Я решил эту проблему. Изменить изменение в теге скрипта -gt; store()
От:
let formData = new FormData(); formData.append('file_data', this.file_data);
Для:
if(document.getElementById("file_data").files[0]){ this.form.file_data = document.getElementById("file_data").files[0]; }
Добавление file_date
form: new Form
и удаление formData
this.form.post
.
Комментарии:
1. Можете ли вы уточнить свое объяснение? Что вы подразумеваете под «Изменить изменение в теге сценария -gt; магазин()`? Похоже, это не отражено в вашем фактическом предложении. Я неправильно понял? Если так, то и другие тоже могли бы.