Browse Source

Updating trim on posted data to be compatible with CakePHP 3.7+

Fixes #206
Chris Hallgren 7 years ago
parent
commit
398da90f07

+ 8 - 2
src/Controller/Component/CommonComponent.php

@@ -5,6 +5,7 @@ namespace Tools\Controller\Component;
 use Cake\Core\Configure;
 use Cake\Event\Event;
 use Cake\Routing\Router;
+use Cake\Utility\Hash;
 use Shim\Controller\Component\Component;
 use Tools\Utility\Utility;
 
@@ -25,8 +26,13 @@ class CommonComponent extends Component {
 	 */
 	public function startup(Event $event) {
 		// Data preparation
-		if ($this->Controller->request->getData() && !Configure::read('DataPreparation.notrim')) {
-			$this->Controller->request->data = Utility::trimDeep($this->Controller->request->getData());
+		if ($this->Controller->getRequest()->getData() && !Configure::read('DataPreparation.notrim')) {
+			$request = $this->Controller->getRequest();
+			$new_data = Hash::flatten(Utility::trimDeep($this->Controller->getRequest()->getData()));
+			foreach ($new_data as $k => $v) {
+				$request = $request->withData($k, $v);
+			}
+			$this->Controller->setRequest($request);
 		}
 		if ($this->Controller->getRequest()->getQuery() && !Configure::read('DataPreparation.notrim')) {
 			$this->Controller->setRequest($this->Controller->getRequest()->withQueryParams(Utility::trimDeep($this->Controller->getRequest()->getQuery())));

+ 37 - 0
tests/TestCase/Controller/Component/CommonComponentTest.php

@@ -243,6 +243,7 @@ class CommonComponentTest extends TestCase {
 		$this->Controller->setRequest($this->Controller->getRequest()->withMethod('PATCH'));
 		$this->assertTrue($this->Controller->Common->isPosted());
 	}
+
 	/**
 	 * @return void
 	 */
@@ -254,6 +255,7 @@ class CommonComponentTest extends TestCase {
 		$helpers = $this->Controller->viewBuilder()->getHelpers();
 		$this->assertEquals(['Tester', 'Tester123'], $helpers);
 	}
+
 	/**
 	 * @return void
 	 */
@@ -274,6 +276,7 @@ class CommonComponentTest extends TestCase {
 		];
 		$this->assertEquals($expected, $result);
 	}
+
 	/**
 	 * @return void
 	 */
@@ -282,6 +285,7 @@ class CommonComponentTest extends TestCase {
 		$cache_control = $this->Controller->getResponse()->getHeaderLine('Cache-Control');
 		$this->assertEquals('public, max-age=' . HOUR, $cache_control);
 	}
+
 	/**
 	 * @return void
 	 */
@@ -313,6 +317,7 @@ class CommonComponentTest extends TestCase {
 		];
 		$this->assertSame($expected, $query);
 	}
+
 	/**
 	 * @return void
 	 */
@@ -345,4 +350,36 @@ class CommonComponentTest extends TestCase {
 		$this->assertSame($expected, $pass);
 	}
 
+	/**
+	 * @return void
+	 */
+	public function testTrimData() {
+		Configure::write('DataPreparation.notrim', false);
+		$request = $this->Controller->getRequest();
+		$request = $request->withData('data', [
+			'a' => [
+				'b' => [
+					' c '
+				]
+			],
+			' d ',
+			' e',
+			'f '
+		]);
+		$this->Controller->setRequest($request);
+		$this->Controller->Common->startup(new Event('Test'));
+		$pass = $this->Controller->getRequest()->getData('data');
+		$expected = [
+			'a' => [
+				'b' => [
+					'c'
+				]
+			],
+			'd',
+			'e',
+			'f'
+		];
+		$this->assertSame($expected, $pass);
+	}
+
 }