Вызов функции-члена getPathName () в массиве

Я загружаю на свой сервер в Laravel массив из нескольких файлов.

Когда я регистрирую файлы с помощью $request->file('files'), я получаю:

[2018-11-12 16:10:03] local.DEBUG: array (
  0 => 
  Illuminate\Http\UploadedFile::__set_state(array(
     'test' => false,
     'originalName' => 'test-pdf.pdf',
     'mimeType' => 'application/pdf',
     'error' => 0,
     'hashName' => NULL,
  )),
  1 => 
  Illuminate\Http\UploadedFile::__set_state(array(
     'test' => false,
     'originalName' => 'test-pdf.pdf',
     'mimeType' => 'application/pdf',
     'error' => 0,
     'hashName' => NULL,
  )),
  2 => 
  Illuminate\Http\UploadedFile::__set_state(array(
     'test' => false,
     'originalName' => 'test-pdf.pdf',
     'mimeType' => 'application/pdf',
     'error' => 0,
     'hashName' => NULL,
  )),
)

Я хочу получить доступ к каждому файлу в массиве и получить такой путь к имени:

$files = $request->files;
foreach ($files as $key => $file) {
  Log::debug($file->getPathName());
}

Однако это вызывает следующую ошибку:

local.ERROR: Call to a member function getPathName() on array {"exception":"[object] (Symfony\\Component\\Debug\\Exception\\FatalThrowableError(code: 0): Call to a member function getPathName() on array at /home/vagrant/Projects/business-risk-portal/app/Http/Controllers/FileController.php:68)

Как получить доступ к пути к каждому из этих загруженных файлов?

ОБНОВИТЬ Если я попробую это:

$files = $request->files;
foreach ($files as $key => $file) {
   $temp_path = $request->file('tmp.' . $key);
   Log::debug($temp_path->getPathName());
}

Я получил:

Call to a member function getPathName() on null {"exception":"[object] (Symfony\\Component\\Debug\\Exception\\FatalThrowableError(code: 0): Call to a member function getPathName() on null at /home/vagrant/Projects/business-risk-portal/app/Http/Controllers/FileController.php:69)

Я предполагаю, что $ request-> files и $ request-> file ('files') возвращают разные значения ... Возможно, $ request-> files возвращает массив всех файлов по сравнению с файлами с входным именем files.

Devon 12.11.2018 17:46

Введен ли ваш $request->files в запрос для обработки сообщений формы? Если да, то можно сделать print_r($request->files)? Возможно, он возвращает информацию, как $_FILES, то есть это массивы, а не объекты.

Diogo Santo 12.11.2018 18:45

@ Девон, ты прав. Вы можете написать это как ответ, и я сделаю его принятым.

Marcus Christiansen 13.11.2018 07:22
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
0
3
2 405
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Вот что у меня сработало:

Сторона сервера:

$files = $request->file('myfiles');

foreach($files as $file) {
    $target = $file->move(storage_path('files'), $file->getClientOriginalName());
    $path = $target->getPath() . DIRECTORY_SEPARATOR . $target->getFileName();
}

Вид:

<form method = "post" action = "/myfiles" enctype = "multipart/form-data">
    {{csrf_field()}}
    <input type = "file" name = "myfiles[]" class = "form-control" multiple />
    <button type = "submit" class = "btn btn-success">Save</button>
</form>
Ответ принят как подходящий

$request->files вернет многомерный массив всех файлов, а $request->file('files') вернет массив только файлов, относящихся к входу files.

Другие вопросы по теме