From a94651b4880b478d05f1ad7ddb47fed42e4fa7a0 Mon Sep 17 00:00:00 2001 From: Tobias van Beek Date: Thu, 14 Nov 2019 12:37:18 +0100 Subject: [PATCH] Add the support for arrays with files in a request --- src/DefaultLogWriter.php | 23 ++++++++++++++++++----- tests/DefaultLogWriterTest.php | 18 ++++++++++++++++++ 2 files changed, 36 insertions(+), 5 deletions(-) diff --git a/src/DefaultLogWriter.php b/src/DefaultLogWriter.php index 72ec863..672f745 100644 --- a/src/DefaultLogWriter.php +++ b/src/DefaultLogWriter.php @@ -3,6 +3,7 @@ namespace Spatie\HttpLogger; use Illuminate\Http\Request; +use Illuminate\Support\Collection; use Illuminate\Support\Facades\Log; use Symfony\Component\HttpFoundation\File\UploadedFile; @@ -16,12 +17,24 @@ public function logRequest(Request $request) $bodyAsJson = json_encode($request->except(config('http-logger.except'))); - $files = array_map(function (UploadedFile $file) { - return $file->getClientOriginalName(); - }, iterator_to_array($request->files)); - - $message = "{$method} {$uri} - Body: {$bodyAsJson} - Files: ".implode(', ', $files); + $files = (new Collection(iterator_to_array($request->files))) + ->map([$this, 'flatFiles']) + ->flatten() + ->implode(',') + ; + $message = "{$method} {$uri} - Body: {$bodyAsJson} - Files: ". $files; Log::info($message); } + + public function flatFiles($file) + { + if ($file instanceof UploadedFile) { + return $file->getClientOriginalName(); + } + if (is_array($file)) { + return array_map([$this, 'flatFiles'], $file); + } + return (string) $file; + } } diff --git a/tests/DefaultLogWriterTest.php b/tests/DefaultLogWriterTest.php index 8db3f6f..314fc26 100644 --- a/tests/DefaultLogWriterTest.php +++ b/tests/DefaultLogWriterTest.php @@ -80,4 +80,22 @@ public function it_logs_files() $this->assertStringContainsString('test.md', $log); } + + /** @test */ + public function it_logs_files_in_an_array() + { + $file = $this->getTempFile(); + + $request = $this->makeRequest('post', $this->uri, [], [], [ + 'files' => [ + new UploadedFile($file, 'test.md') + ], + ]); + + $this->logger->logRequest($request); + + $log = $this->readLogFile(); + + $this->assertStringContainsString('test.md', $log); + } }