Browse Source

made source context pass through to next source if no value found for context source

Jonas Hartmann 9 years ago
parent
commit
f7d1ddd404
2 changed files with 31 additions and 9 deletions
  1. 6 9
      src/View/Helper/FormHelper.php
  2. 25 0
      tests/TestCase/View/Helper/FormHelperTest.php

+ 6 - 9
src/View/Helper/FormHelper.php

@@ -2733,17 +2733,14 @@ class FormHelper extends Helper
     {
         foreach ($this->getValuesSources() as $valuesSource) {
             if ($valuesSource === 'context') {
-                return $this->_getContext()->val($fieldname, $options);
-            }
-            if ($this->request->{$valuesSource}($fieldname) !== null) {
+                $val = $this->_getContext()->val($fieldname, $options);
+                if ($val !== null) {
+                    return $val;
+                }
+            } elseif ($this->request->{$valuesSource}($fieldname) !== null) {
                 return $this->request->{$valuesSource}($fieldname);
             }
         }
-        if (isset($options['default'])) {
-            return $options['default'];
-        }
-        if (isset($options['schemaDefault'])) {
-            return $options['schemaDefault'];
-        }
+        return null;
     }
 }

+ 25 - 0
tests/TestCase/View/Helper/FormHelperTest.php

@@ -8556,4 +8556,29 @@ class FormHelperTest extends TestCase
         $expected = ['input' => ['type' => 'password', 'name' => 'password', 'value' => 'helloworld']];
         $this->assertHtml($expected, $result);
     }
+
+
+    /**
+     * Test sources values schema defaults handling
+     *
+     * @return void
+     */
+    public function testSourcesValueDoesntExistPassThrough()
+    {
+        $this->Form->request->query['category'] = 'sesame-cookies';
+
+        $Articles = TableRegistry::get('Articles');
+        $entity = $Articles->newEntity();
+        $this->Form->create($entity);
+
+        $this->Form->setValuesSources(['query', 'context']);
+        $result = $this->Form->getSourceValue('category');
+        $expected = 'sesame-cookies';
+        $this->assertEquals($expected, $result);
+
+        $this->Form->setValuesSources(['context', 'query']);
+        $result = $this->Form->getSourceValue('category');
+        $expected = 'sesame-cookies';
+        $this->assertEquals($expected, $result);
+    }
 }