diff --git a/src/View/Form/FormContext.php b/src/View/Form/FormContext.php index 1760274d11e..0c0ea93a5a3 100644 --- a/src/View/Form/FormContext.php +++ b/src/View/Form/FormContext.php @@ -94,7 +94,28 @@ public function val($field, $options = []) return $val; } - return $options['default']; + if ($options['default'] !== null || !$options['schemaDefault']) { + return $options['default']; + } + + return $this->_schemaDefault($field); + } + + /** + * Get default value from form schema for given field. + * + * @param string $field Field name. + + * @return mixed + */ + protected function _schemaDefault($field) + { + $field = $this->_form->schema()->field($field); + if ($field) { + return $field['default']; + } + + return null; } /** diff --git a/tests/TestCase/View/Form/FormContextTest.php b/tests/TestCase/View/Form/FormContextTest.php index f47f152bc85..7c72b3eaebf 100644 --- a/tests/TestCase/View/Form/FormContextTest.php +++ b/tests/TestCase/View/Form/FormContextTest.php @@ -111,10 +111,24 @@ public function testValMissing() */ public function testValDefault() { - $context = new FormContext($this->request, ['entity' => new Form()]); + $form = new Form(); + $form->schema()->addField('name', ['default' => 'schema default']); + $context = new FormContext($this->request, ['entity' => $form]); + + $result = $context->val('title'); + $this->assertNull($result); $result = $context->val('title', ['default' => 'default default']); $this->assertEquals('default default', $result); + + $result = $context->val('name'); + $this->assertEquals('schema default', $result); + + $result = $context->val('name', ['default' => 'custom default']); + $this->assertEquals('custom default', $result); + + $result = $context->val('name', ['schemaDefault' => false]); + $this->assertNull($result); } /**