diff --git a/lib/Cake/Test/Case/View/Helper/FormHelperTest.php b/lib/Cake/Test/Case/View/Helper/FormHelperTest.php index 5d44fa4f5..6008fc414 100644 --- a/lib/Cake/Test/Case/View/Helper/FormHelperTest.php +++ b/lib/Cake/Test/Case/View/Helper/FormHelperTest.php @@ -1527,9 +1527,7 @@ class FormHelperTest extends CakeTestCase { } /** - * testPasswordValidation method - * - * test validation errors on password input. + * Test validation errors. * * @return void */ @@ -1553,18 +1551,31 @@ class FormHelperTest extends CakeTestCase { '/div' ); $this->assertTags($result, $expected); + + $result = $this->Form->input('Contact.password', array('errorMessage' => false)); + $expected = array( + 'div' => array('class' => 'input password error'), + 'label' => array('for' => 'ContactPassword'), + 'Password', + '/label', + 'input' => array( + 'type' => 'password', 'name' => 'data[Contact][password]', + 'id' => 'ContactPassword', 'class' => 'form-error' + ), + '/div' + ); + $this->assertTags($result, $expected); } /** - * testEmptyErrorValidation method - * - * test validation error div when validation message is an empty string + * Test validation errors, when validation message is an empty string. * * @access public * @return void */ public function testEmptyErrorValidation() { $this->Form->validationErrors['Contact']['password'] = ''; + $result = $this->Form->input('Contact.password'); $expected = array( 'div' => array('class' => 'input password error'), @@ -1581,18 +1592,31 @@ class FormHelperTest extends CakeTestCase { '/div' ); $this->assertTags($result, $expected); + + $result = $this->Form->input('Contact.password', array('errorMessage' => false)); + $expected = array( + 'div' => array('class' => 'input password error'), + 'label' => array('for' => 'ContactPassword'), + 'Password', + '/label', + 'input' => array( + 'type' => 'password', 'name' => 'data[Contact][password]', + 'id' => 'ContactPassword', 'class' => 'form-error' + ), + '/div' + ); + $this->assertTags($result, $expected); } /** - * testEmptyInputErrorValidation method - * - * test validation error div when validation message is overridden by an empty string when calling input() + * Test validation errors, when calling input() overriding validation message by an empty string. * * @access public * @return void */ public function testEmptyInputErrorValidation() { $this->Form->validationErrors['Contact']['password'] = 'Please provide a password'; + $result = $this->Form->input('Contact.password', array('error' => '')); $expected = array( 'div' => array('class' => 'input password error'), @@ -1609,6 +1633,20 @@ class FormHelperTest extends CakeTestCase { '/div' ); $this->assertTags($result, $expected); + + $result = $this->Form->input('Contact.password', array('error' => '', 'errorMessage' => false)); + $expected = array( + 'div' => array('class' => 'input password error'), + 'label' => array('for' => 'ContactPassword'), + 'Password', + '/label', + 'input' => array( + 'type' => 'password', 'name' => 'data[Contact][password]', + 'id' => 'ContactPassword', 'class' => 'form-error' + ), + '/div' + ); + $this->assertTags($result, $expected); } /** diff --git a/lib/Cake/View/Helper/FormHelper.php b/lib/Cake/View/Helper/FormHelper.php index e884abcbd..4ec5e403b 100644 --- a/lib/Cake/View/Helper/FormHelper.php +++ b/lib/Cake/View/Helper/FormHelper.php @@ -920,16 +920,18 @@ class FormHelper extends AppHelper { * will be treated as a regular html attribute for the generated input. * * - `type` - Force the type of widget you want. e.g. `type => 'select'` - * - `label` - Either a string label, or an array of options for the label. See FormHelper::label() + * - `label` - Either a string label, or an array of options for the label. See FormHelper::label(). * - `div` - Either `false` to disable the div, or an array of options for the div. * See HtmlHelper::div() for more options. - * - `options` - for widgets that take options e.g. radio, select - * - `error` - control the error message that is produced + * - `options` - For widgets that take options e.g. radio, select. + * - `error` - Control the error message that is produced. Set to `false` to disable any kind of error reporting (field + * error and error messages). + * - `errorMessage` - Boolean to control rendering error messages (field error will still occur). * - `empty` - String or boolean to enable empty select box options. * - `before` - Content to place before the label + input. * - `after` - Content to place after the label + input. * - `between` - Content to place between the label + input. - * - `format` - format template for element order. Any element that is not in the array, will not be in the output. + * - `format` - Format template for element order. Any element that is not in the array, will not be in the output. * - Default input format order: array('before', 'label', 'between', 'input', 'after', 'error') * - Default checkbox format order: array('before', 'input', 'between', 'label', 'after', 'error') * - Hidden input will not be formatted @@ -1078,6 +1080,9 @@ class FormHelper extends AppHelper { $error = $this->_extractOption('error', $options, null); unset($options['error']); + $errorMessage = $this->_extractOption('errorMessage', $options, true); + unset($options['errorMessage']); + $selected = $this->_extractOption('selected', $options, null); unset($options['selected']); @@ -1157,7 +1162,9 @@ class FormHelper extends AppHelper { $errMsg = $this->error($fieldName, $error); if ($errMsg) { $divOptions = $this->addClass($divOptions, 'error'); - $out['error'] = $errMsg; + if ($errorMessage) { + $out['error'] = $errMsg; + } } }