Browse Source

Merge files as objects by default in request data.

ADmad 6 years ago
parent
commit
edfba0c2cf

+ 2 - 2
src/Http/ServerRequest.php

@@ -222,7 +222,7 @@ class ServerRequest implements ServerRequestInterface
      *
      * @var bool
      */
-    protected $mergeFilesAsObjects = false;
+    protected $mergeFilesAsObjects = true;
 
     /**
      * Create a new request object.
@@ -261,7 +261,7 @@ class ServerRequest implements ServerRequestInterface
             'base' => '',
             'webroot' => '',
             'input' => null,
-            'mergeFilesAsObjects' => false,
+            'mergeFilesAsObjects' => true,
         ];
 
         $this->_setConfig($config);

+ 1 - 1
src/Http/ServerRequestFactory.php

@@ -78,7 +78,7 @@ abstract class ServerRequestFactory implements ServerRequestFactoryInterface
             'webroot' => $uri->webroot,
             'base' => $uri->base,
             'session' => $session,
-            'mergeFilesAsObjects' => Configure::read('App.uploadedFilesAsObjects', false),
+            'mergeFilesAsObjects' => Configure::read('App.uploadedFilesAsObjects', true),
         ]);
 
         return $request;

+ 15 - 11
tests/TestCase/Http/ServerRequestFactoryTest.php

@@ -20,6 +20,7 @@ use Cake\Core\Configure;
 use Cake\Http\ServerRequestFactory;
 use Cake\Http\Session;
 use Cake\TestSuite\TestCase;
+use Psr\Http\Message\UploadedFileInterface;
 use Zend\Diactoros\UploadedFile;
 
 /**
@@ -108,8 +109,15 @@ class ServerRequestFactoryTest extends TestCase
         $this->assertSame($_GET['query'], $res->getQuery('query'));
         $this->assertArrayHasKey('title', $res->getData());
         $this->assertArrayHasKey('image', $res->getData());
-        $this->assertSame($_FILES['image'], $res->getData('image'));
         $this->assertCount(1, $res->getUploadedFiles());
+
+        /** @var \Zend\Diactoros\UploadedFile $expected */
+        $expected = $res->getData('image');
+        $this->assertInstanceOf(UploadedFileInterface::class, $expected);
+        $this->assertSame($_FILES['image']['size'], $expected->getSize());
+        $this->assertSame($_FILES['image']['error'], $expected->getError());
+        $this->assertSame($_FILES['image']['name'], $expected->getClientFilename());
+        $this->assertSame($_FILES['image']['type'], $expected->getClientMediaType());
     }
 
     /**
@@ -304,16 +312,12 @@ class ServerRequestFactoryTest extends TestCase
         ];
         $request = ServerRequestFactory::fromGlobals(null, null, null, null, $files);
 
-        $expected = [
-            'file' => [
-                'tmp_name' => __FILE__,
-                'error' => 0,
-                'name' => 'file.txt',
-                'type' => 'text/plain',
-                'size' => 1234,
-            ],
-        ];
-        $this->assertEquals($expected, $request->getData());
+        /** @var \Zend\Diactoros\UploadedFile $expected */
+        $expected = $request->getData('file');
+        $this->assertSame($files['file']['size'], $expected->getSize());
+        $this->assertSame($files['file']['error'], $expected->getError());
+        $this->assertSame($files['file']['name'], $expected->getClientFilename());
+        $this->assertSame($files['file']['type'], $expected->getClientMediaType());
     }
 
     /**

+ 3 - 2
tests/TestCase/Http/ServerRequestTest.php

@@ -401,7 +401,7 @@ class ServerRequestTest extends TestCase
                 'name' => 'A dog',
             ],
         ];
-        $request = new ServerRequest(compact('files', 'post'));
+        $request = new ServerRequest(compact('files', 'post') + ['mergeFilesAsObjects' => false]);
         $expected = [
             'image_main' => [
                 'file' => [
@@ -477,7 +477,7 @@ class ServerRequestTest extends TestCase
             ],
         ];
 
-        $request = new ServerRequest(compact('files'));
+        $request = new ServerRequest(['files' => $files, 'mergeFilesAsObjects' => false]);
         $expected = [
             'birth_cert' => [
                 'name' => 'born on.txt',
@@ -517,6 +517,7 @@ class ServerRequestTest extends TestCase
 
         $request = new ServerRequest([
             'files' => $files,
+            'mergeFilesAsObjects' => false,
         ]);
         $this->assertEquals($files, $request->getData());