【问题标题】:Laravel media multi uploadLaravel 媒体多上传
【发布时间】:2021-12-15 08:08:02
【问题描述】:

我正在尝试上传多节课。但是有些东西不起作用。我认为 $data->lesson 有问题无法上课,或者 create 的问题真的不知道我是新手 :) 这是我的控制器

public function storeLesson(Lesson $lesson)
    {
        $data = request()->validate([
            'lesson.lesson' => 'required',
            'lesson_folder_id.lesson_folder_id' => '',
        ], [
            'lesson.lesson.required' => 'error message',
        ]);
        if (request()->hasFile('lesson')) {
            $path = request()->file('lesson')->store('lessons', ['disk' =>      'my_files']);
            $data->lesson = $path;
        }


        $create = $lesson->create($data['lesson'],['lesson_folder_id']);

        return redirect('/courses')->with('success', 'success message.');
    }

文件系统.php

 'disks' => [

        'local' => [
            'driver' => 'local',
            'root' => storage_path('app'),
        ],

        'public' => [
            'driver' => 'local',
            'root' => storage_path('app/public'),
            'url' => env('APP_URL') . '/storage',
            'visibility' => 'public',
        ],

        's3' => [
            'driver' => 's3',
            'key' => env('AWS_ACCESS_KEY_ID'),
            'secret' => env('AWS_SECRET_ACCESS_KEY'),
            'region' => env('AWS_DEFAULT_REGION'),
            'bucket' => env('AWS_BUCKET'),
            'url' => env('AWS_URL'),
            'endpoint' => env('AWS_ENDPOINT'),
            'use_path_style_endpoint' => env('AWS_USE_PATH_STYLE_ENDPOINT', false),
        ],

        'my_files' => [
            'driver' => 'local',
            'root'   => public_path() . '/'
        ]
    ],

还有我的刀

<form method="POST" action="{{ route('storeLesson') }}" enctype="multipart/form-data">
            <div class="mb-3">
                @foreach($c->lessonFolders as $f)
                {{ $f->name }}
                <input hidden name="lesson_folder_id[lesson_folder_id]" type="text" value="{{ $f->id }}">
                <label class="form-label" for="customFile"></label>
                <input name="lesson[lesson]" type="file" class="form-control" id="customFile">
                @foreach($f->lessons as $l)
                @if($l->lesson)
                TRUE
                @endif
                @endforeach
                @endforeach
            </div>
            <button class="btn btn-danger" type="submit">upload</button>
        </form>

那么我做错了什么?是控制器故障还是我的刀片故障?

【问题讨论】:

  • 你必须传递一个名称为 lessons[]lessons[$id] 的数组,键应该是唯一的,在上面的示例中,所有文件的键都是相同的。
  • 我在刀片课程[] 中进行了更改,而课程文件夹 ID[] 仍然不起作用
  • 当您传递数组时,您可以循环数组并将每个数组存储在数据库中。使用dd() 转储控制器中的值并检查您是否收到所有必要的值
  • @Vaskontrop 您还需要更改控制器中的变量,因为我发布了lessons 而不是lesson
  • 我在控制器中更改了课程,但它仍然不起作用

标签: php laravel


【解决方案1】:

如果你将lesson[]命名为输入标签,$request-&gt;lesson将给出一个数组而不是一个文件,所以你不能使用request()-&gt;hasFile('lesson')

你应该使用name="lesson"进行单次上传,如果你想多次上传你应该使用lesson[]然后在控制器中

    if (is_array(request()->lesson)) {
        foreach (request()->lesson as $lesson) {
            $path = $lesson->store('lessons', ['disk' => 'my_files']);
            $data->lesson = $path;
        }
    }

【讨论】:

  • 如果你的例子我会改变,但是 course_folder_id 呢?在刀片上,我有 course_folder_id[] 和 Lesson[] 但它不起作用
  • 不,我明白了,你的代码有很多错误代码。
  • 是的,我知道(我很难写出好的代码,因为我是这方面的新手,但我怎样才能正确地做到呢?
  • 你需要解释你想要什么,什么不行。
  • 用户必须创建课程文件夹,他可以制作,然后在文件夹中他必须上传课程,他可以上传一个课程,然后另一个课程在不同的选择文件中,如果他愿意,他将选择 5 个课程,然后他必须点击提交按钮,这 5 节课必须在课程表中上传 5 条不同的记录 course_folder_id 将与不同的课程相同。对不起我的英语不好
猜你喜欢
  • 2019-01-21
  • 1970-01-01
  • 2011-09-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-10-05
  • 2012-12-26
相关资源
最近更新 更多