php - 从多个输入中获取数据
问题描述
有一个表单和多个输入。表单有一个用于添加视频的字段。我还可以动态添加一组字段。
当我将多个数据提交到一个表单时,除了视频之外的所有数据都会正确传输。
帮助发送数组中的多个视频。这是我的控制器:
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>
解决方案
请分享刀片文件的代码,以便我们知道问题所在。并确保您已将 encyt 类型定义为 multipart/form... 在表单中
并建议您不需要使用 Auth::id() ,您可以像这样调用 create
auth()->user()->files()->create($file)
并在模型 User.php 中添加一个公共函数
public function files(){
return $this->hasMany(File::class);
}
在模型 File.php
public function user(){
return $this->belongsTo(User::class);
}
这样,您无需在每次添加新数据时调用 Auth::id,它会自动将当前登录用户的 id 添加到您的数据的数据库中。
推荐阅读
- python - 如何在像魔法瓷砖3这样的节奏游戏中同步音乐
- javascript - 如何使用 Javascript 调用 Jenkins API?
- vue.js - 如何在 vuetiy 的 v-card 中添加复选框
- typescript - 试图理解“T 扩展推断 U”的限制
- laravel - laravel 开票
- javascript - Javascript我们如何搜索一个id是否在数组数组中重复?
- python-3.x - LDA 模型:为什么主题“词”是数字?
- angular - Scala进程花费太多时间时的角度重试?
- python-3.x - 为什么在 Linux 上的 python 3 中,“多处理”版本比单进程版本花费更长的时间?
- docker - 更改 Artifactory 网址