【发布时间】:2020-12-04 12:28:26
【问题描述】:
有一个表单和多个输入。表单有一个用于添加视频的字段。我还可以动态添加一组字段。
当我将多个数据提交到一个表单时,除了视频之外的所有数据都会正确传输。
帮助以数组形式发送多个视频。这是我的控制器:
public function store(Request $request)
{
$path = array_map(function ($v) {return $v->store('images', 's3');}, $request->file('link_video'));
$userId = Auth::id();
$course = Course::where('user_id', $userId)->orderBy('created_at', 'desc')->first();
foreach ($request->lesson_id as $key => $file) {
$file = File::create([
'course_id' => $course->id,
'user_id' => $userId,
'lesson_id' => $request->input('lesson_id')[$key],
'lesson_name' => $request->input('lesson_name')[$key],
'description' => $request->input('description')[$key],
'link_video' => Storage::disk('s3')->url($path[$key]),
]);
}
File::create($file);
return redirect()->route('teaching')->with('success', 'Курс успешно создан!');
}
这是我的表格
<form action="{{ route('store') }} " method="post" enctype="multipart/form-data">
@csrf
<div class="dynamic_fields">
<div class="example_student">
<div class="table">
<div class="container">
<div class="bg-light text-dark">
<div class="cell">
<button class="js-remove pull-right btn btn-danger btn-sm">x</button>
</div>
<div class="cell"><div class="mb-3">
<label for="lesson_id"></label>
<select name="lesson_id[]" class="custom-select" id="lesson_id" >
<option value="1">@lang('main.lesson 1')</option>
<option value="2">@lang('main.lesson 2')</option>
<option value="3">@lang('main.lesson 3')</option>
<option value="4">@lang('main.lesson 4')</option>
<option value="5">@lang('main.lesson 5')</option>
<option value="6">@lang('main.lesson 6')</option>
<option value="7">@lang('main.lesson 7')</option>
</select>
</div></div>
<div class="cell"> <div class="mb-3">
<label for="lesson_name">@lang('main.lesson_name')</label>
<input name="lesson_name[]" type="text" class="form-control" id="lesson_name" >
<div class="invalid-feedback">
Please enter a valid name of course.
</div>
</div></div>
<div class="cell"> <div class="mb-3">
<label for="description">@lang('main.lesson_description')<span class="text-muted"></span></label>
<textarea name="description[]" type="message" id="description" class="form-control" required=""></textarea>
</div></div>
<div class="cell"><div class="input-group mb-3">
<div class="custom-file">
<input type="file" name="link_video[]" class="custom-file-input" id="link_video">
<label class="custom-file-label" for="link_video">@lang('main.choose_lesson')</label>
</div>
</div></div>
<div class="cell"><div class="input-group mb-3">
<div class="custom-file">
<input type="file" name="link_document[]" class="custom-file-input" id="link_document">
<label class="custom-file-label" for="link_document">@lang('main.choose_attachments') <span class="text-muted">(@lang('main.attachments_helper'))</span></label>
</div>
</div></div>
</div>
</div>
</div>
</div>
<div class="students"></div>
<div class="container text-center">
<h2 class="js-add btn btn-outline-primary">@lang('main.add_more')</h2></div>
</div>
<br><button class="btn btn-primary btn-lg btn-block" type="submit">@lang('main.create_course')</button><br>
</form>
<script>
var button_add = document.querySelector('.dynamic_fields .js-add');
button_add.addEventListener('click', function() {
var students = document.querySelector('.dynamic_fields .students');
var element = document.querySelector('.example_student').cloneNode(true);
element.classList.add('student');
element.classList.remove('example_student');
students.appendChild(element);
});
document.addEventListener('click', function(el) {
if (el.target && el.target.classList.contains('js-remove')) {
var child = el.target.closest('.table');
child.parentNode.removeChild(child);
}
});
</script>
【问题讨论】:
-
能否请您分享您的表单代码,以便我们了解您当前如何将数据发送到控制器?
-
确保你已经在表单标签中定义了 enctype='multipart/form-data',这可能是一个原因。
-
我的视频保存在aws中,但是mysql无法写入自己
标签: php arrays laravel eloquent